본 내용은 [멀티캠퍼스] 데이터 분석&데이터 엔지니어링 취업캠프 28회차에서 실시한 수업 내용 중 일부입니다.
윈도우 함수란?
윈도우 함수(Window Function)는 SQL 쿼리에서 사용되는 데이터베이스 함수 중 하나로, 결과 집합 내에서 특정 창 또는 분할된 그룹에 대한 계산을 수행하는 함수이다. 행의 집합에 대한 집계, 순위 지정, 누적 계산 등 다양한 분석 작업을 수행하는 데 사용된다.
해당 포스팅에서 알아볼 윈도우 함수는 순위를 부여하는 함수 ROW_NUMBER(), RANK(), DENSE_RANK()이다.
이 3가지 함수는 결과 집합의 각 행에 대한 순위를 계산하는 데에 사용된다. 비슷한 작업을 수행하지만 약간의 차이점이 있다.
1. ROW_NUMBER():
- 정의: ROW_NUMBER() 함수는 각 행에 고유한 순번(순위)를 부여한다.
- 특징:
- ROW_NUMBER() 함수는 중복된 값이 있을 경우에도 각 행에 고유한 번호를 부여하며, 순번은 정수로 표현된다.
- 결과 집합의 각 행에 대한 고유한 식별자가 필요한 경우 주로 사용된다.
2. RANK():
- 정의: RANK() 함수는 결과 집합의 각 행을 순위로 나타낸다. 동일한 값이 있을 경우 동일한 순위를 부여하고, 중복된 값을 건너뜁니다.
- 특징:
- RANK() 함수는 동일한 값에 대해서는 동일한 순위를 할당하고, 중복된 값을 가진 행은 그 다음 순위로 건너뛴다.
- 중복된 값을 가진 행을 건너뛰기 때문에 순위 간격이 커질 수 있다.
- 순위가 중요한 분석 작업에 사용된다.
3. DENSE_RANK():
- 정의: DENSE_RANK() 함수는 RANK()와 유사하지만 중복된 값에 대해서도 같은 순위를 부여한다.
- 특징:
- DENSE_RANK() 함수는 동일한 값에 대해서는 동일한 순위를 할당하고, 중복된 값을 가진 행은 그 다음 순위로 건너뛰지 않는다.
- 중복된 값을 가진 행을 건너뛰지 않기 때문에 순위 간격이 크지 않다.
- 평균 점수 등과 같이 중복된 값을 가지는 경우에 사용된다.
ROW_NUMBER(), RANK(), DENSE_RANK()의 공통점과 차이점:
공통점: 모두 결과 집합의 각 행에 대한 순위를 부여하는 함수로 사용된다.
차이점:
- ROW_NUMBER(): 각 행에 고유한 순번을 부여하며 중복된 값에 대해서도 고유한 순번을 부여한다.
- RANK(): 중복된 값에 대해서는 동일한 순위를 부여하고 중복된 값을 건너뛴다.
- DENSE_RANK(): 중복된 값에 대해서도 동일한 순위를 부여하고 순위 간격이 작다.
MySQL 쿼리문 예시:


- ROW_NUMBER()는 중복된 값에 고유한 순번 부여
- RANK()는 중복된 값에 동일한 순번을 부여하고 그 다음 순위를 건너뛴다.
- DENSE_RANK()는 중복된 값에 동일한 순번을 부여하고 그 다음 순위를 건너뛰지 않는다.
'SQL' 카테고리의 다른 글
| [MySQL] SQL로 맛보는 데이터 전처리 분석(2-2) (2) | 2023.10.08 |
|---|---|
| [MySQL] SQL로 맛보는 데이터 전처리 분석(2-1) (0) | 2023.10.07 |
| [MySQL] 셀프조인(Feat: 재구매율) (2) | 2023.10.05 |
| [MySQL] 실습하기 전 데이터 다운로드 및 불러오기 (0) | 2023.10.05 |
| [MySQL] ERD 확인 및 추출하기 (0) | 2023.10.04 |