21.
정삼각형 : 선분 3개 동일
이등변삼각형 : 2개만 동일
일반삼각형 : 선분 길이가 다 다름
삼각형이 아님 : 2개의 변의 길이의 합이 나머지 1개의 변의 길이보다 작거나 같으면 삼각형이 아님
문제 : 각 변의 길이를 나타내는 A, B, C 컬럼의 값들을 보고 삼각형이 어떤 TYPE 인지 불러와라!
코드 :
SELECT
CASE
WHEN (A = B) AND (C = B) THEN 'Equilateral'
WHEN (A+B <= C) OR (A+C <= B) OR (B+C <= A) THEN 'Not A Triangle'
WHEN (A=B) OR (B=C) OR (A=C) THEN 'Isosceles'
ELSE 'Scalene'
END
FROM TRIANGLES;
팁 : CASE WHEN 조건 THEN 불러올값
END 가 세트
22.
문제 : CITY 테이블에서 POPULATION 이 100000 초과인 도시의 총 개수를 구하라.
팁 : Aggregation (집계함수)
- COUNT : 결과 행들의 개수 (중복된 값도 모두 COUNT)
- SUM : 결과 행들의 합
- AVG : 결과 행들의 평균
- MAX : 결과 행들 중 MAX값을 출력
- MIN : 결과 행들 중 MIN값을 출력
코드 :
SELECT COUNT(NAME)
FROM CITY
WHERE POPULATION > 100000;
23.
문제 : District 가 California 인 CITY 들의 총 Population 을 구하라
팁 : 집계함수
코드 :
SELECT SUM(POPULATION) FROM CITY
WHERE DISTRICT = 'California';
24.
얘도 똑같음 AVG로 인구수 구하면 됨
코드 :
SELECT AVG(POPULATION) FROM CITY
WHERE DISTRICT = 'California';
25.
문제 : 구한 평균값을 정수가 되도록 내림하시오
팁 : 정수로 만들기
반올림 - ROUND( )
올림 - CEIL( ) + MYSQL 에선 CEILING( )으로 사용
내림 - FLOOR( )
코드 : SELECT floor(AVG(POPULATION)) FROM CITY;
26.
문제 : JPN 에 있는 도시 인구수 총합 구하시오
코드 :
SELECT SUM(POPULATION) FROM CITY
WHERE COUNTRYCODE = 'JPN';
27.
문제 : 인구 최대값 - 인구 최소값 구하기
코드 : SELECT MAX(POPULATION) - MIN(POPULATION) FROM CITY;
28.
문제 : 사만다 키보드의 자판 0 이 고장나서 모든 Salary에 0을 입력을 못했다. 그래서 그 상태로 거짓 평균 Salary를 구했는데 해당 값과 실제 0이 다 들어간 Salary의 실제 평균 Salary의 차(Difference)를 구해서 정수로 올림하라.
팁 : replace(컬럼명, (바꿀)대상값, (새롭게 입력할)바꿀값)
새롭게 입력할 값을 생략하면 대상값만 삭제하게 됨
코드 : SELECT CEIL( AVG(Salary) - AVG( REPLACE(Salary, '0') ) ) FROM EMPLOYEES;
---> REPLACE(Salary, '0') : Salary 컬럼에서 모든 0을 다 삭제해버리겠다.
29.
문제 : 다음과 같은 쿼리 2개를 만들어라.
1. 이름(직업의 첫번째 글자) 형태로 출력
2. 각 직업끼리 묶어서 개수를 센 뒤, There are a total of [해당 직업에 해당하는 명수] [직업 이름 소문자로]s. 형태로 출력
예를 들면,
Samantha Doctor 이라는 행 하나만 있으면
Samantha(D)
There are a total of 1 doctors. 라고 둘다 출력해주면 된다.
팁 :
1. 문자열을 합칠 때 MYSQL 과 달리 ORACLE에서는 CONCAT( )의 인자가 단 2개만 사용할 수 있다.
3개 이상을 합치려면 CONCAT(a, CONCAT(b,c) ) 이런식으로 계속 중첩해주야 하는데 솔직히 성가시다..
그냥 || 라는 합치기 기호를 사용하자!
* ORACLE 문자열 합치기 기호는 키보드 상에서 원화표시 위에 있는 ' | ' 작대기 2개를 사용하면 된다.
2. ORACLE 에서는 LEFT() 함수를 사용할 수 없으므로 SUBSTR() 로 문자 맨 앞 한자리를 잘라줘야 한다..
* SUBSTR(문자열, 몇번째 문자부터시작할건지, 해당위치부터 몇자리수 자를건지? )
예를 들면
SUBSTR( 'DUCK' , 2, 1) 이면
"U"가 출력된다.
처음에 뭣도 모르고 이렇게 해놓고 오류난다고 쩔쩔매고 있었다..
인자가 3개 이상이 들어가서 invalid number of arguments 라는 오류가 도출됐다.
LEFT도 고쳐야 한다.
코드 :
SELECT Name || '(' || SUBSTR(Occupation,1,1) || ')' FROM OCCUPATIONS
ORDER BY Name;
SELECT 'There are a total of ' || COUNT(Occupation) || ' ' || LOWER(Occupation) || 's.' FROM OCCUPATIONS
GROUP BY Occupation ORDER BY COUNT(Occupation), LOWER(Occupation);
|| 를 사용하니까 훨씬 직관적으로 잘 보이는 듯하다.
'SQL 공부' 카테고리의 다른 글
SQL 독학 시작, 해커랭크(ORACLE) BASIC (2주차) 16~20 (0) | 2023.03.22 |
---|---|
SQL 독학, 해커랭크(ORACLE) (1~15) DISTINCT, NOT LIKE, 서브쿼리, MOD, LENGTH, ORDERBY, ROWNUMBER (0) | 2023.03.01 |