RANK, DENSE_RANK, ROW_NUMBER

SOOYEON·2022년 8월 7일
0

SQL

목록 보기
20/54

RANK, DENSE_RANK, ROW_NUMBER

차이점 1. 동점 처리 방법

  • ROW_NUMBER() : 동점인 경우도 서로 다른 등수로 계산
  • DENSE_RANK(), RANK() : 동점인 경우 같은 등수로 계산

차이점 2. 그 다음 등수 값(순위) 매김 방법

  • DENSE_RANK() : 동점 등수 바로 다음 수로 순위 매김
  • RANK() : 동점인 경우 데이터 세트를 고려해 다음 등수 매김



SYNTAX

SELECT ROW_NUMBER() OVER(ORDER BY column) FROM...
SELECT RANK() OVER(ORDER BY column) FROM...
SELECT DENSE_RANK() OVER(ORDER BY column) FROM...

고객 번호, 구매 금액 테이블이 존재할 때 구매 금액으로 순위를 매기고 싶다면

SELECT *,
ROW_NUMBER() OVER(ORDER BY 구매 금액) ROWNUMBER,
RANK() OVER(ORDER BY 구매 금액) RANK,
DENSE_RANK() OVER(ORDER BY 구매 금액) DENSE_RANK
FROM TABLE;



SYNTAX

만약 고객 번호 내에서 순위를 매기고 싶다면

SELECT ROW_NUMBER() OVER(PARTITION BY column) FROM...
SELECT RANK() OVER(PARTITION BY column) FROM...
SELECT DENSE_RANK() OVER(PARTITION BY column) FROM...
SELECT *,
ROW_NUMBER() OVER(PARTITION BY 고객 번호 ORDER BY 구매 금액) ROWNUMBER,
RANK() OVER(PARTITION BY 고객 번호 ORDER BY 구매 금액) RANK,
DENSE_RANK() OVER(PARTITION BY 고객 번호 ORDER BY 구매 금액) DENSE_RANK
FROM TABLE;



Q1

PRODUCTS 테이블에서 BUYPRICE 컬럼으로 순위 매김
+) 오름차순, ROW_NUMBER, RANK, DENSE_RANK 사용

SELECT ROW_NUMBER() OVER(ORDER BY BUYPRICE), 
       RANK() OVER(ORDER BY BUYPRICE), 
       DENSE_RANK() OVER(ORDER BY BUYPRICE)
FROM PRODUCTS;

1-2

SELECT BUYPRICE,
       ROW_NUMBER() OVER(ORDER BY BUYPRICE), 
       RANK() OVER(ORDER BY BUYPRICE), 
       DENSE_RANK() OVER(ORDER BY BUYPRICE)
FROM PRODUCTS;



Q2

PRODUCTS 테이블의 productline 별로 순위 매김
+) `BUYPRICE 컬럼 기준, 오름차순, ROW_NUMBER, RANK, DENSE_RANK 사용

SELECT BUYPRICE, 
	   ROW_NUMBER() OVER(PARTITION BY PRODUCTLINE ORDER BY BUYPRICE) RN,
	   RANK() OVER(PARTITION BY PRODUCTLINE ORDER BY BUYPRICE) RK,
       DENSE_RANK() OVER(PARTITION BY PRODUCTLINE ORDER BY BUYPRICE) DRK
FROM PRODUCTS;



0개의 댓글