SELECT employee_id, salary, RANK() OVER(ORDER BY salary DESC) FROM employees
급여가 높은 순서대로 동일 순위를 부여해서 조회한다
RANK는 공동 순위 발생 시 다음 순위를 건너뛴다.
Card
emy
← 탐색으로 돌아가기
시험 후반부에서 자주 등장하는 윈도우 함수, 순위 함수, CASE 문, DECODE, NVL 같은 함수들을 집중 학습한다. 특히 RANK, DENSE_RANK, ROW_NUMBER 차이처럼 헷갈리는 포인트를 반복적으로 익히고, GROUPING SETS, ROLLUP, CUBE 같은 고난도 영역도 실전 문제 중심으로 정리한다. 함수 문제를 빠르게 해석하는 능력을 만드는 단계다.
무료 체험 퀴즈
SELECT employee_id, salary, RANK() OVER(ORDER BY salary DESC) FROM employees
급여가 높은 순서대로 동일 순위를 부여해서 조회한다
RANK는 공동 순위 발생 시 다음 순위를 건너뛴다.
SELECT employee_id, salary, DENSE_RANK() OVER(ORDER BY salary DESC) FROM employees
급여가 높은 순서대로 빈 순위 없이 순위를 조회한다
DENSE_RANK는 공동 순위 다음 번호를 건너뛰지 않는다.
SELECT employee_id, salary, ROW_NUMBER() OVER(ORDER BY salary DESC) FROM employees
급여가 높은 순서대로 고유 번호를 부여해서 조회한다
ROW_NUMBER는 중복 없이 무조건 순차 번호를 부여한다.
SELECT employee_id, department_id, salary, RANK() OVER(PARTITION BY department_id ORDER BY salary DESC) FROM employees
부서별로 급여 순위를 조회한다
PARTITION BY는 그룹별로 윈도우 함수를 따로 계산한다.
SELECT employee_id, department_id, salary, ROW_NUMBER() OVER(PARTITION BY department_id ORDER BY salary DESC) FROM employees
부서별 급여 순서에 따라 고유 번호를 조회한다
부서마다 번호가 다시 1부터 시작된다.
아래 문항들은 이 학습지에 수록된 카드입니다. 로그인하면 이 학습지를 내 계정으로 복사해 카드를 한 장씩 넘기며 반복 학습할 수 있고, 숙달한 카드는 완료 표시하여 다음 세션에서 제외할 수 있습니다.
SELECT employee_id, salary, RANK() OVER(ORDER BY salary DESC) FROM employees
SELECT employee_id, salary, DENSE_RANK() OVER(ORDER BY salary DESC) FROM employees
SELECT employee_id, salary, ROW_NUMBER() OVER(ORDER BY salary DESC) FROM employees
SELECT employee_id, department_id, salary, RANK() OVER(PARTITION BY department_id ORDER BY salary DESC) FROM employees
SELECT employee_id, department_id, salary, ROW_NUMBER() OVER(PARTITION BY department_id ORDER BY salary DESC) FROM employees
SELECT employee_id, salary, SUM(salary) OVER() FROM employees
SELECT employee_id, department_id, salary, SUM(salary) OVER(PARTITION BY department_id) FROM employees
SELECT employee_id, salary, AVG(salary) OVER() FROM employees
SELECT employee_id, salary, MAX(salary) OVER() FROM employees
SELECT employee_id, salary, MIN(salary) OVER() FROM employees
SELECT employee_id, hiredate, LAG(hiredate) OVER(ORDER BY hiredate) FROM employees
SELECT employee_id, hiredate, LEAD(hiredate) OVER(ORDER BY hiredate) FROM employees
SELECT employee_id, salary, FIRST_VALUE(salary) OVER(ORDER BY salary DESC) FROM employees
SELECT employee_id, salary, LAST_VALUE(salary) OVER(ORDER BY salary DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM employees
SELECT employee_id, salary, NTILE(4) OVER(ORDER BY salary DESC) FROM employees
SELECT employee_id, salary, CUME_DIST() OVER(ORDER BY salary DESC) FROM employees
SELECT employee_id, salary, PERCENT_RANK() OVER(ORDER BY salary DESC) FROM employees
SELECT employee_id, salary, RATIO_TO_REPORT(salary) OVER() FROM employees
SELECT employee_id, department_id, salary, SUM(salary) OVER(PARTITION BY department_id ORDER BY salary) FROM employees
SELECT employee_id, salary, AVG(salary) OVER(ORDER BY hiredate ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) FROM employees
SELECT employee_id, salary, COUNT(*) OVER() FROM employees
SELECT employee_id, department_id, COUNT(*) OVER(PARTITION BY department_id) FROM employees
SELECT department_id, SUM(salary) FROM employees GROUP BY ROLLUP(department_id)
SELECT department_id, job_id, SUM(salary) FROM employees GROUP BY ROLLUP(department_id, job_id)
SELECT department_id, SUM(salary) FROM employees GROUP BY CUBE(department_id)
SELECT department_id, job_id, SUM(salary) FROM employees GROUP BY CUBE(department_id, job_id)
SELECT department_id, job_id, SUM(salary) FROM employees GROUP BY GROUPING SETS(department_id, job_id)
SELECT department_id, job_id, SUM(salary) FROM employees GROUP BY GROUPING SETS((department_id, job_id),(department_id),())
SELECT department_id, GROUPING(department_id) FROM employees GROUP BY ROLLUP(department_id)
SELECT employee_id, CASE WHEN salary >= 5000 THEN 'HIGH' ELSE 'LOW' END FROM employees
SELECT employee_id, CASE department_id WHEN 10 THEN 'SALES' WHEN 20 THEN 'HR' ELSE 'ETC' END FROM employees
SELECT employee_id, DECODE(department_id,10,'SALES',20,'HR','ETC') FROM employees
SELECT employee_id, NVL(commission_pct,0) FROM employees
SELECT employee_id, NVL2(commission_pct,'Y','N') FROM employees
SELECT employee_id, NULLIF(salary,0) FROM employees
SELECT employee_id, COALESCE(commission_pct,bonus_pct,0) FROM employees
SELECT employee_id, ROUND(salary, -2) FROM employees
SELECT employee_id, TRUNC(salary, -2) FROM employees
SELECT employee_id, MOD(salary,1000) FROM employees
SELECT employee_id, CEIL(salary/1000) FROM employees
SELECT employee_id, FLOOR(salary/1000) FROM employees
SELECT employee_id, POWER(salary,2) FROM employees
SELECT employee_id, ABS(salary-5000) FROM employees
SELECT employee_id, LENGTH(first_name) FROM employees
SELECT employee_id, SUBSTR(first_name,1,3) FROM employees
SELECT employee_id, INSTR(first_name,'A') FROM employees
SELECT employee_id, LPAD(first_name,10,'*') FROM employees
SELECT employee_id, RPAD(first_name,10,'*') FROM employees
SELECT employee_id, REPLACE(first_name,'A','X') FROM employees
SELECT employee_id, TRIM('A' FROM first_name) FROM employees
SELECT employee_id, LOWER(first_name) FROM employees
SELECT employee_id, UPPER(first_name) FROM employees
SELECT employee_id, CONCAT(first_name,last_name) FROM employees
SELECT employee_id, first_name || last_name FROM employees
SELECT employee_id, TO_CHAR(hiredate,'YYYYMMDD') FROM employees
SELECT employee_id, TO_CHAR(salary,'999,999') FROM employees
SELECT employee_id, TO_DATE('20250515','YYYYMMDD') FROM employees
SELECT employee_id, TO_NUMBER('1000') FROM employees
SELECT employee_id, EXTRACT(YEAR FROM hiredate) FROM employees
SELECT employee_id, MONTHS_BETWEEN(SYSDATE,hiredate) FROM employees
SELECT employee_id, ADD_MONTHS(hiredate,6) FROM employees
SELECT employee_id, NEXT_DAY(hiredate,'MONDAY') FROM employees
SELECT employee_id, LAST_DAY(hiredate) FROM employees
SELECT employee_id, salary, CASE WHEN salary >= 10000 THEN 'A' WHEN salary >= 5000 THEN 'B' ELSE 'C' END FROM employees
SELECT department_id, SUM(salary) FROM employees GROUP BY department_id HAVING SUM(salary) > 50000
SELECT employee_id, salary, SUM(salary) OVER(ORDER BY hiredate) FROM employees
SELECT employee_id, department_id, AVG(salary) OVER(PARTITION BY department_id) FROM employees