[SQL] 순위함수

hyunsooSong·2022년 5월 24일
0

SQL

목록 보기
8/14
post-thumbnail

🚀 순위함수

🌌 순위 함수는 ORDER BY를 포함한 QUERY문에서 틀정 컬럼에 대한 순위를 구하는 함수이다.

1. RANK 함수

✅ RANK 함수는 동일한 값에 대해서는 동일한 순위를 부여하며, 중간 값은 비워둔다.

[월별매출]

월(PK)고객번호(PK)고객명매출액
202204001송부장200
202203002김부장300
202202003최팀장250
202201004곽인턴150

SELECT 월, 고객번호, 고객명, 매출액 RANK() OVER(ORDER BY 매출액 DESC) AS 순위
FROM 월별매출
ORDER BY 순위, 월;

[SQL 결과]

월(PK)고객번호(PK)고객명매출액순위
202202003최팀장2501
202203002김부장2002
202204001송부장2002
202201004곽인턴1504

순위 : 1 ➡ 2, 2 ➡ 4


2. DENSE_RANK 함수

✅ RANK 함수는 동일한 값에 대해서는 동일한 순위를 부여한다는 것에서 RANK 함수와 흡사하나, 동일한 순위를 하나의 건수로 취급한다.

[월별매출]

월(PK)고객번호(PK)고객명매출액
202204001송부장200
202203002김부장300
202202003최팀장250
202201004곽인턴150

SELECT 월, 고객번호, 고객명, 매출액 DENSE_RANK() OVER(ORDER BY 매출액 DESC) AS 순위
FROM 월별매출
ORDER BY 순위, 월;

[SQL 결과]

월(PK)고객번호(PK)고객명매출액순위
202202003최팀장2501
202203002김부장2002
202204001송부장2002
202201004곽인턴1503

순위 : 1 ➡ 2, 2 ➡ 3


3. ROW_NUMBER

✅ ROW_NUMBER 함수는 동일한 값이라도 고유한 순위를 부한다.

[월별매출]

월(PK)고객번호(PK)고객명매출액
202204001송부장200
202203002김부장300
202202003최팀장250
202201004곽인턴150

SELECT 월, 고객번호, 고객명, 매출액 ROW_NUMBER() OVER(ORDER BY 매출액 DESC) AS 순위
FROM 월별매출
ORDER BY 순위, 월;

[SQL 결과]

월(PK)고객번호(PK)고객명매출액순위
202202003최팀장2501
202203002김부장2002
202204001송부장2003
202201004곽인턴1504

순위 : 1 ➡ 2 ➡ 34

💫 RANK(), DENSE_RANK(), ROW_NUMBER()

  • RANK() : 동일 값 동일 순위, 중간 값 비워둔다.
  • DENSE_RANK() : 동일 값 동일 순위, 중간 값 비우지 않는다.
  • ROW_NUMBER() : 동일 값 유일한 순위.

+ 👀 틈새 지식

💡 윈도우 함수, PARTITION BY

  • PARTITION과 GROUP BY 구문은 의미적으로 유사하다.
  • PARTITION 구문이 없으면 전체 집합을 하나의 PARTITION으로 정의한 것과 동일하다.
  • 윈도우 함수는 결과에 대한 함수 처리이기 때문에 결과 건수에 영향을 주지 않는다.
  • 윈도우 함수의 적용 범위는 PARTITION을 넘을 수 없다.
profile
🥕 개발 공부 중 🥕

0개의 댓글