*dense : 빽빽한, 밀집한
세 개의 함수는 모두 순위를 매길 때 사용하지만, 조금씩의 차이가 있다. 예제 세팅 글
제품 가격이 낮은 순서로 순위를 매기고 싶다. 단, 같은 가격에도 순위 차이가 생기도록 한다. - ROW_NUMBER
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);
Postgresql에서는 같은 값을 가지는 ROW 중 ROW ID 가 높은 행이 우선 정렬된다 (desc 정렬에도 동일하다)
= SELECT * FROM product; 하면 'sony vaio'는 7행, 'lenovo thinkpad'는 6행
제품 가격이 낮은 순서로 순위를 매기고 싶다. 단, 같은 가격은 공동 순위로 하며, 공동 순위가 있는 만큼 다음 순위를 매기지 않는다. - RANK
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);
순위가 1,1,3위 인 것을 볼 수 있다
제품 가격이 낮은 순서로 순위를 매기고 싶다. 단, 같은 가격은 공동 순위로 하며, 공동 순위와 관계없이 순위를 매긴다. - DENSE_RANK
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);
순위가 1,1,2위 인 것을 볼 수 있다
'데이터 분석 > SQL' 카테고리의 다른 글
[쉽게 쓴 SQL] LAG, LEAD 함수 (0) | 2020.11.06 |
---|---|
[쉽게 쓴 SQL] FIRST_VALUE, LAST_VALUE 함수 (0) | 2020.11.06 |
[SQL 문법] AVG 함수 (0) | 2020.11.05 |
[SQL 문법] 분석 함수 (0) | 2020.11.05 |
[SQL 문법] CUBE () 절 (0) | 2020.11.05 |