[SQLD합격] 고급 SQL과 함수 문제 대응력 만들기
시험 후반부에서 자주 등장하는 윈도우 함수, 순위 함수, CASE 문, DECODE, NVL 같은 함수들을 집중 학습한다. 특히 RANK, DENSE_RANK, ROW_NUMBER 차이처럼 헷갈리는 포인트를 반복적으로 익히고, GROUPING SETS, ROLLUP, CUBE 같은 고난도 영역도 실전 문제 중심으로 정리한다. 함수 문제를 빠르게 해석하는 능력을 만드는 단계다.
수록 문항
총 67개아래 문항들은 이 학습지에 수록된 카드입니다. 각 카드는 문제(Q)와 답(A)으로 구성되어 있으며, 일부 카드에는 추가 해설이 포함되어 있습니다. 로그인하면 이 학습지를 내 계정으로 복사해 카드를 한 장씩 넘기며 반복 학습할 수 있고, 숙달한 카드는 완료 표시하여 다음 세션에서 제외할 수 있습니다.
-
#1Q.
SELECT employee_id, salary, RANK() OVER(ORDER BY salary DESC) FROM employees
A.급여가 높은 순서대로 동일 순위를 부여해서 조회한다
RANK는 공동 순위 발생 시 다음 순위를 건너뛴다. -
#2Q.
SELECT employee_id, salary, DENSE_RANK() OVER(ORDER BY salary DESC) FROM employees
A.급여가 높은 순서대로 빈 순위 없이 순위를 조회한다
DENSE_RANK는 공동 순위 다음 번호를 건너뛰지 않는다. -
#3Q.
SELECT employee_id, salary, ROW_NUMBER() OVER(ORDER BY salary DESC) FROM employees
A.급여가 높은 순서대로 고유 번호를 부여해서 조회한다
ROW_NUMBER는 중복 없이 무조건 순차 번호를 부여한다. -
#4Q.
SELECT employee_id, department_id, salary, RANK() OVER(PARTITION BY department_id ORDER BY salary DESC) FROM employees
A.부서별로 급여 순위를 조회한다
PARTITION BY는 그룹별로 윈도우 함수를 따로 계산한다. -
#5Q.
SELECT employee_id, department_id, salary, ROW_NUMBER() OVER(PARTITION BY department_id ORDER BY salary DESC) FROM employees
A.부서별 급여 순서에 따라 고유 번호를 조회한다
부서마다 번호가 다시 1부터 시작된다. -
#6Q.
SELECT employee_id, salary, SUM(salary) OVER() FROM employees
답은 로그인 후 확인 -
#7Q.
SELECT employee_id, department_id, salary, SUM(salary) OVER(PARTITION BY department_id) FROM employees
답은 로그인 후 확인 -
#8Q.
SELECT employee_id, salary, AVG(salary) OVER() FROM employees
답은 로그인 후 확인 -
#9Q.
SELECT employee_id, salary, MAX(salary) OVER() FROM employees
답은 로그인 후 확인 -
#10Q.
SELECT employee_id, salary, MIN(salary) OVER() FROM employees
답은 로그인 후 확인 -
#11Q.
SELECT employee_id, hiredate, LAG(hiredate) OVER(ORDER BY hiredate) FROM employees
답은 로그인 후 확인 -
#12Q.
SELECT employee_id, hiredate, LEAD(hiredate) OVER(ORDER BY hiredate) FROM employees
답은 로그인 후 확인 -
#13Q.
SELECT employee_id, salary, FIRST_VALUE(salary) OVER(ORDER BY salary DESC) FROM employees
답은 로그인 후 확인 -
#14Q.
SELECT employee_id, salary, LAST_VALUE(salary) OVER(ORDER BY salary DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM employees
답은 로그인 후 확인 -
#15Q.
SELECT employee_id, salary, NTILE(4) OVER(ORDER BY salary DESC) FROM employees
답은 로그인 후 확인 -
#16Q.
SELECT employee_id, salary, CUME_DIST() OVER(ORDER BY salary DESC) FROM employees
답은 로그인 후 확인 -
#17Q.
SELECT employee_id, salary, PERCENT_RANK() OVER(ORDER BY salary DESC) FROM employees
답은 로그인 후 확인 -
#18Q.
SELECT employee_id, salary, RATIO_TO_REPORT(salary) OVER() FROM employees
답은 로그인 후 확인 -
#19Q.
SELECT employee_id, department_id, salary, SUM(salary) OVER(PARTITION BY department_id ORDER BY salary) FROM employees
답은 로그인 후 확인 -
#20Q.
SELECT employee_id, salary, AVG(salary) OVER(ORDER BY hiredate ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) FROM employees
답은 로그인 후 확인 -
#21Q.
SELECT employee_id, salary, COUNT(*) OVER() FROM employees
답은 로그인 후 확인 -
#22Q.
SELECT employee_id, department_id, COUNT(*) OVER(PARTITION BY department_id) FROM employees
답은 로그인 후 확인 -
#23Q.
SELECT department_id, SUM(salary) FROM employees GROUP BY ROLLUP(department_id)
답은 로그인 후 확인 -
#24Q.
SELECT department_id, job_id, SUM(salary) FROM employees GROUP BY ROLLUP(department_id, job_id)
답은 로그인 후 확인 -
#25Q.
SELECT department_id, SUM(salary) FROM employees GROUP BY CUBE(department_id)
답은 로그인 후 확인 -
#26Q.
SELECT department_id, job_id, SUM(salary) FROM employees GROUP BY CUBE(department_id, job_id)
답은 로그인 후 확인 -
#27Q.
SELECT department_id, job_id, SUM(salary) FROM employees GROUP BY GROUPING SETS(department_id, job_id)
답은 로그인 후 확인 -
#28Q.
SELECT department_id, job_id, SUM(salary) FROM employees GROUP BY GROUPING SETS((department_id, job_id),(department_id),())
답은 로그인 후 확인 -
#29Q.
SELECT department_id, GROUPING(department_id) FROM employees GROUP BY ROLLUP(department_id)
답은 로그인 후 확인 -
#30Q.
SELECT employee_id, CASE WHEN salary >= 5000 THEN 'HIGH' ELSE 'LOW' END FROM employees
답은 로그인 후 확인 -
#31Q.
SELECT employee_id, CASE department_id WHEN 10 THEN 'SALES' WHEN 20 THEN 'HR' ELSE 'ETC' END FROM employees
답은 로그인 후 확인 -
#32Q.
SELECT employee_id, DECODE(department_id,10,'SALES',20,'HR','ETC') FROM employees
답은 로그인 후 확인 -
#33Q.
SELECT employee_id, NVL(commission_pct,0) FROM employees
답은 로그인 후 확인 -
#34Q.
SELECT employee_id, NVL2(commission_pct,'Y','N') FROM employees
답은 로그인 후 확인 -
#35Q.
SELECT employee_id, NULLIF(salary,0) FROM employees
답은 로그인 후 확인 -
#36Q.
SELECT employee_id, COALESCE(commission_pct,bonus_pct,0) FROM employees
답은 로그인 후 확인 -
#37Q.
SELECT employee_id, ROUND(salary, -2) FROM employees
답은 로그인 후 확인 -
#38Q.
SELECT employee_id, TRUNC(salary, -2) FROM employees
답은 로그인 후 확인 -
#39Q.
SELECT employee_id, MOD(salary,1000) FROM employees
답은 로그인 후 확인 -
#40Q.
SELECT employee_id, CEIL(salary/1000) FROM employees
답은 로그인 후 확인 -
#41Q.
SELECT employee_id, FLOOR(salary/1000) FROM employees
답은 로그인 후 확인 -
#42Q.
SELECT employee_id, POWER(salary,2) FROM employees
답은 로그인 후 확인 -
#43Q.
SELECT employee_id, ABS(salary-5000) FROM employees
답은 로그인 후 확인 -
#44Q.
SELECT employee_id, LENGTH(first_name) FROM employees
답은 로그인 후 확인 -
#45Q.
SELECT employee_id, SUBSTR(first_name,1,3) FROM employees
답은 로그인 후 확인 -
#46Q.
SELECT employee_id, INSTR(first_name,'A') FROM employees
답은 로그인 후 확인 -
#47Q.
SELECT employee_id, LPAD(first_name,10,'*') FROM employees
답은 로그인 후 확인 -
#48Q.
SELECT employee_id, RPAD(first_name,10,'*') FROM employees
답은 로그인 후 확인 -
#49Q.
SELECT employee_id, REPLACE(first_name,'A','X') FROM employees
답은 로그인 후 확인 -
#50Q.
SELECT employee_id, TRIM('A' FROM first_name) FROM employees
답은 로그인 후 확인 -
#51Q.
SELECT employee_id, LOWER(first_name) FROM employees
답은 로그인 후 확인 -
#52Q.
SELECT employee_id, UPPER(first_name) FROM employees
답은 로그인 후 확인 -
#53Q.
SELECT employee_id, CONCAT(first_name,last_name) FROM employees
답은 로그인 후 확인 -
#54Q.
SELECT employee_id, first_name || last_name FROM employees
답은 로그인 후 확인 -
#55Q.
SELECT employee_id, TO_CHAR(hiredate,'YYYYMMDD') FROM employees
답은 로그인 후 확인 -
#56Q.
SELECT employee_id, TO_CHAR(salary,'999,999') FROM employees
답은 로그인 후 확인 -
#57Q.
SELECT employee_id, TO_DATE('20250515','YYYYMMDD') FROM employees
답은 로그인 후 확인 -
#58Q.
SELECT employee_id, TO_NUMBER('1000') FROM employees
답은 로그인 후 확인 -
#59Q.
SELECT employee_id, EXTRACT(YEAR FROM hiredate) FROM employees
답은 로그인 후 확인 -
#60Q.
SELECT employee_id, MONTHS_BETWEEN(SYSDATE,hiredate) FROM employees
답은 로그인 후 확인 -
#61Q.
SELECT employee_id, ADD_MONTHS(hiredate,6) FROM employees
답은 로그인 후 확인 -
#62Q.
SELECT employee_id, NEXT_DAY(hiredate,'MONDAY') FROM employees
답은 로그인 후 확인 -
#63Q.
SELECT employee_id, LAST_DAY(hiredate) FROM employees
답은 로그인 후 확인 -
#64Q.
SELECT employee_id, salary, CASE WHEN salary >= 10000 THEN 'A' WHEN salary >= 5000 THEN 'B' ELSE 'C' END FROM employees
답은 로그인 후 확인 -
#65Q.
SELECT department_id, SUM(salary) FROM employees GROUP BY department_id HAVING SUM(salary) > 50000
답은 로그인 후 확인 -
#66Q.
SELECT employee_id, salary, SUM(salary) OVER(ORDER BY hiredate) FROM employees
답은 로그인 후 확인 -
#67Q.
SELECT employee_id, department_id, AVG(salary) OVER(PARTITION BY department_id) FROM employees
답은 로그인 후 확인
처음 5개의 답만 미리 보여드려요. 전체 67개 항목은 로그인 후 학습할 수 있습니다.
이 학습지를 효과적으로 활용하는 방법
- ① 처음에는 전체 문항을 한 번씩 훑어보며 익숙한 항목과 낯선 항목을 분류하세요.
- ② 학습 세션에서 "안 외운 문항만" 옵션으로 아직 숙달하지 못한 카드에 집중합니다.
- ③ 랜덤 순서 학습을 활용해 카드 순서에 의존한 암기를 방지하세요.
- ④ 키보드 단축키(1·2·A·D·Space)를 쓰면 한 손으로도 빠르게 복습할 수 있습니다.
- ⑤ 복사(Fork)한 학습지에는 자유롭게 나만의 해설이나 예문을 덧붙여 내 스타일로 다듬어 보세요.