[SQL] 분석함수 DENSE_RANK

·2025년 7월 3일

SQL

목록 보기
57/126

예제 답

select ename, job, sal,
        rank() over (order by sal desc) as 순위,
        dense_rank() over (order by sal desc) as 순위2
 from emp
 where job in ('ANALYST', 'MANAGER');

문제1. 직업, 이름, 월급, 순위를 출력하는데 순위가 직업별로 각각 월급이 높은 순서대로 순위를 부여하시오. ( dense_rank() 함수를 사용하세요 )

select job, ename, sal, dense_rank() over (partition by job
        				   				   order by sal desc) as 순위
 from emp;

문제2. 월급이 2975이면 사원 테이블에서 월급의 순위가 어떻게 되는가?

select dense_rank(2975) within group (order by sal desc) 순위
 from emp;

💡 주로 over를 사용하고
위와 같이 괄호안에 어떤 값이 들어갔으면 그때 within group을 사용


문제3. 나이가 28이면 emp21 테이블에서 나이의 순위가 어떻게 되는가?

select dense_rank(28) within group (order by age desc) 순위
 from emp21;

💡 언제 over를 쓰고 언제 within group을 사용하는가?
문법1: dense_rank() over ( order by sal desc )
문법2: dense_rank(숫자) within group ( order by sal desc )


복습문제. 월급이 1000 에서 3000 사이인 사원들의 이름과 월급과 월급에 대한 순위를 출력하시오 (dense_rank 이용)

select ename, sal, dense_rank() over (order by sal desc) 순위
 from emp
 where sal between 1000 and 3000;

0개의 댓글