SQL에서 DENSE_RANK 함수 사용 방법

핵심 원리

DENSE_RANK() 함수는 SQL에서 순위를 매길 때 사용되는 분석 함수입니다. RANK() 함수와 유사하지만, 동일한 순위가 있을 경우, 다음 순위의 간격을 두지 않고 연속적인 순위를 매깁니다. 예를 들어, 1위가 두 명일 경우 RANK() 함수는 그 다음 순위를 3위로 표시하지만, DENSE_RANK() 함수는 2위로 표시합니다.

실무에서 쓰이는 이유

DENSE_RANK() 함수는 순위의 연속성을 보장해야 하는 경우, 특히 데이터 분석에서 중복된 값을 가진 항목들이 있을 때 유용합니다. 예를 들어, 판매량이 동일한 제품들이 여러 개 있을 경우 이들을 같은 순위로 매기고 싶을 때 DENSE_RANK()를 사용하면 적절합니다.

실무에서 구체적으로 어떤 상황에서 사용 되는지 예상 상황 예측

DENSE_RANK()는 다음과 같은 상황에서 사용될 수 있습니다:

  1. 판매 순위 분석: 동일한 매출을 기록한 영업 사원들이 있을 때, 그들을 같은 순위로 표시하면서 그 다음 순위를 연속적으로 부여하는 경우.
  2. 경기 대회 순위: 여러 참가자가 동일한 점수를 받은 경우, 그들에게 동일한 순위를 부여하고 다음 순위를 연속적으로 유지해야 하는 경우.
  3. 제품 성능 평가: 동일한 성능 점수를 기록한 제품들이 있을 때, 그들에게 동일한 순위를 부여하고 연속적인 순위를 유지하는 경우.

연습 문제

다음 SQL 쿼리를 작성하세요:

  1. 직원들의 부서별 월급 순위를 DENSE_RANK()를 사용하여 출력하세요.
  2. 월급이 3000 이상인 직원들에 대해 DENSE_RANK()를 사용하여 순위를 매기고 결과를 출력하세요.

연습문제 해답

  1. SELECT deptno, ename, sal, DENSE_RANK() OVER (PARTITION BY deptno ORDER BY sal DESC) AS rank FROM emp;
SELECT ename, sal, DENSE_RANK() OVER (ORDER BY sal DESC) AS rank
FROM emp
WHERE sal >= 3000;

응용 문제

다음 SQL 쿼리를 작성하세요:

  1. 1981년에 입사한 직원들의 부서별 월급 순위를 DENSE_RANK()를 사용하여 출력하세요.
  2. 부서별로 월급이 가장 높은 직원의 순위를 출력하고, 월급이 3000 이상인 직원들만 결과에 포함되도록 하세요.

응용문제 해답

  1. SELECT deptno, ename, sal, DENSE_RANK() OVER (PARTITION BY deptno ORDER BY sal DESC) AS rank FROM emp WHERE hiredate BETWEEN TO_DATE('1981/01/01', 'YYYY/MM/DD') AND TO_DATE('1981/12/31', 'YYYY/MM/DD');
SELECT deptno, ename, sal, DENSE_RANK() OVER (PARTITION BY deptno ORDER BY sal DESC) AS rank
FROM emp
WHERE sal >= 3000;

Posts created 411

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top