SELECT
day,
time,
sex,
total_bill
FROM
(
SELECT
day,
time,
sex,
total_bill,
rank() OVER (
PARTITION BY
day
ORDER BY
total_bill DESC
) bill_rank
FROM
tips
)
WHERE
bill_rank <= 3
순위를 매길 때 사용하는 윈도우 함수
정렬 기준에 따라 순위를 매기고, 동점일 경우 같은 순위를 부여하지만, 그 다음 순위는 건너뜀
RANK() OVER (
[PARTITION BY 그룹기준컬럼]
ORDER BY 정렬기준컬럼 [ASC | DESC]
)
• PARTITION BY: 순위를 나누는 그룹 컬럼 설정 (선택사항)
• ORDER BY: 순위를 결정하는 기준
rank() OVER (PARTITION BY day ORDER BY total_bill DESC)
SELECT name, score,
ROW_NUMBER() OVER (ORDER BY score DESC) AS row_num
FROM students;
이름 | 점수 | rank |
---|---|---|
A | 100 | 1 |
B | 95 | 2 |
C | 95 | 2 |
D | 90 | 4 |
순위 매기는 함수
동점처리 없어서 순위 건너뜀 없음
SELECT name, score,
ROW_NUMBER() OVER (ORDER BY score DESC) AS row_num
FROM students;
이름 | 점수 | ROW_NUMBER |
---|---|---|
A | 100 | 1 |
B | 95 | 2 |
C | 95 | 3 |
D | 90 | 4 |
순위 매기는 함수
동점처리 있지만 순위 건너뜀 없음 (RANK() 함수와 다른 점)
SELECT name, score,
DENSE_RANK() OVER (ORDER BY score DESC) AS dense_rank
FROM students;
이름 | 점수 | dense_rank |
---|---|---|
A | 100 | 1 |
B | 95 | 2 |
C | 95 | 2 |
D | 90 | 3 |