개키우는개발자 : )

PostgreSQL ROW_NUMBER, RANK, DENSE_RANK 함수 본문

PostgreSQL/조인과 집계 데이터

PostgreSQL ROW_NUMBER, RANK, DENSE_RANK 함수

DOGvelopers 2019. 11. 9. 19:17
반응형

실습 테이블 만들기 https://dog-developers.tistory.com/154

ROW_NUMBER, RANK, DENSE_RANK

특정 집합 내에서 결과 건수의 변화 없이 해당 집합안에서 특정 컬럼의 순위를 구하는 함수입니다.

 

실습

 

ROW_NUMBER

 

- 집합 내의 순위를 GROUP_NAME 컬럼 기준으로 구하고 GROUP_NAME 기준의 각 순위는 PRICE 컬럼 기준으로 정렬 합니다.

SELECT
	A.PRODUCT_NAME,
	B.GROUP_NAME,
	A.PRICE,
	ROW_NUMBER () OVER (PARTITION BY B.GROUP_NAME ORDER BY A.PRICE)
FROM
	PRODUCT A
INNER JOIN PRODUCT_GROUP B ON
	(A.GROUP_ID = B.GROUP_ID)

ROW_NUMBER는 무조건 순차적으로 순위를 정합니다.

실습1

 

RANK

 

- 집합 내의 순위를 GROUP_NAME 컬럼 기준으로 구하고 GROUP_NAME 기준의 각 순위는 PRICE 컬럼 기준으로 정렬 합니다.

SELECT
	A.PRODUCT_NAME,
	B.GROUP_NAME,
	A.PRICE,
	RANK () OVER (PARTITION BY B.GROUP_NAME ORDER BY A.PRICE)
FROM
	PRODUCT A
INNER JOIN PRODUCT_GROUP B ON
	(A.GROUP_ID = B.GROUP_ID)

RANK 같은 순위가 있으면 동일 순위로 지정하고 그 다음 순위로 건너 뜁니다.

실습2

 

DENSE_RANK

 

- 집합 내의 순위를 GROUP_NAME 컬럼 기준으로 구하고 GROUP_NAME 기준의 각 순위는 PRICE 컬럼 기준으로 정렬 합니다.

SELECT
	A.PRODUCT_NAME,
	B.GROUP_NAME,
	A.PRICE,
	DENSE_RANK() OVER (PARTITION BY B.GROUP_NAME ORDER BY A.PRICE)
FROM
	PRODUCT A
INNER JOIN PRODUCT_GROUP B ON
	(A.GROUP_ID = B.GROUP_ID)

DENSE_RANK는 같은 순위가 있으면 동일 순위로 지정하고 그 다음순위를 건너 뛰지 않습니다.

실습3

각각의 순위를 지정하는 함수를 사용해 보았습니다.

반응형
Comments