SQL 윈도우 함수는 데이터 분석과 집계 작업을 훨씬 더 강력하고 유연하게 수행할 수 있는 도구입니다. 이번 포스팅에서는 데이터 분석, 트렌드 분석, 순위 매기기 등에서 활용되는 윈도우 함수에 대해 알아보겠습니다.
윈도우 함수 기본 구조
윈도우 함수의 기본 구조는 다음과 같습니다.
<윈도우 함수>(<컬럼>) OVER (
PARTITION BY <컬럼>
ORDER BY <컬럼>
)
주요 윈도우 함수 : 순위 매기기
순위를 매길 때는 RANK()
, DENSE_RANK()
, ROW_NUMBER()
함수를 사용할 수 있습니다.
RANK()
의 경우, 동률이 발생할 경우 동률로 표시하고, 그 개수만큼 다음 순위에 갭이 발생합니다.DENSE_RANK()
의 경우 동률이 발생할 경우 동률로 표시하고 다음 순위에 갭이 없습니다.ROW_NUMBER()
의 경우 동률이 발생해도 무시하고 순위를 부여합니다.
SELECT name, salary,
RANK() OVER (ORDER BY salary DESC) AS rank,
DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank,
ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
FROM employees;
name | salary | rank | dense_rank | row_num |
---|---|---|---|---|
Alice | 7000 | 1 | 1 | 1 |
Charlie | 7000 | 1 | 1 | 2 |
David | 6000 | 3 | 2 | 3 |
Bob | 5000 | 4 | 3 | 4 |
Eve | 4000 | 5 | 4 | 5 |
주요 윈도우 함수 : 집계하기
집계함수인 COUNT()
, SUM()
, AVG()
등의 함수도 윈도우 함수로 사용할 수 있습니다.
SELECT name, salary,
SUM(salary) OVER (PARTITION BY department_id) AS department_total,
AVG(salary) OVER (PARTITION BY department_id) AS department_avg
FROM employees;
name | salary | department_total | department_avg |
---|---|---|---|
Alice | 7000 | 12000 | 6000 |
Bob | 5000 | 12000 | 6000 |
Charlie | 6000 | 11500 | 5750 |
David | 5500 | 11500 | 5750 |
Eve | 4000 | 8500 | 4250 |
Frank | 4500 | 8500 | 4250 |
PARTITION BY
PARTITION BY
는 데이터 집합을 나누는 기준입니다. 위의 쿼리문을 예로 들어보면, PARTITION BY department_id
라고 되어 있기 때문에, 각 department_id 별로 급여의 합계와 평균을 반환합니다. 의 표를 보면, Alice와 Bob이 같은 부서이기 때문에 합계는 12000(7000+5000)이고 평균은 6000인 것을 알 수 있습니다.
'데이터 분석 > 강의 노트' 카테고리의 다른 글
Tableau: 태블로로 다양한 차트 그리기 (1) | 2024.09.06 |
---|---|
Tableau: 태블로 기초 (0) | 2024.08.30 |
SQL 문자열, 날짜, 숫자 관련 함수 (0) | 2024.08.08 |
SQL 기초2: 데이터 집계하기, 그룹화하기, 정렬하기 (0) | 2024.08.01 |
SQL 기초: 데이터베이스와 테이블 생성하는 방법과 데이터 조작하기 (0) | 2024.08.01 |