개발지식 먹는 하마 님의 블로그
SQL - 윈도우 함수 본문
[ Window Function ]
윈도우 함수는 각 행의 세부 데이터를 유지하면서 결과를 반환하는 함수이다.
GROUP BY와 윈도우 함수 모두 어떤 데이터를 그룹화한다는 공통점이 있지만
그룹화해서 집계한 결과를 보여주는 부분에서 차이가 있다.
예를 들어 어떤 회사의 부서별 평균 연봉을 구하고자 했을 때,
employee_id | department | salary |
1 | IT | 50000 |
2 | IT | 60000 |
3 | Sales | 55000 |
4 | Sales | 52000 |
5 | HR | 48000 |
GROUP BY를 사용하면 부서와, 부서 별 평균 연봉에 대한 결과만 출력된다.
department | avg_salary |
IT | 55000 |
Sales | 53500 |
HR | 48000 |
윈도우 함수를 사용하면 각 직원의 세부 데이터와 함께 평균 연봉을 표시해서 비교할 수 있다.
employee_id | department | salary | avg_salary |
1 | IT | 50000 | 55000 |
2 | IT | 60000 | 55000 |
3 | Sales | 55000 | 53500 |
4 | Sales | 52000 | 53500 |
5 | HR | 48000 | 48000 |
< 사용 위치 >
- SELECT
- ORDER BY
< 실행 순서 >
- WHERE -> GROUP BY -> HAVING -> WINDOW FUNCTION -> ORDER BY -> LIMIT -> SELECT -> DISTINCT
< 윈도우 함수 구문 >
윈도우 함수 (컬럼명) OVER (
PARTITION BY 그룹 컬럼명
ORDER BY 정렬 컬럼명 ASC|DESC
)
< 윈도우 함수 유형 >
- 집계 윈도우 함수
SUM, AVG, COUNT, MIN, MAX
누적값을 계산할 수 있다. - 순위 윈도우 함수
ROW_NUMBER : 중복이 없는 순위 = 행 번호
RANK : 중복이 가능한 순위, 공동 순위만큼 건너뛴다.
ex) 공동 1등이 3명이면 그다음 순위는 4등이 된다.
DENSE_RANK : 중복이 가능한 순위, 공동 순위만큼 건너뛰지 않고 순차적으로 번호가 매겨진다.
ex) 공동 1등이 3명이면 그다음 순위는 2등이 된다. - 오프셋 윈도우 함수
데이터 위치 바꾸기
LAG : n칸 미루기
현재 행을 기준으로 이전 행 또는 n행 전의 데이터를 가져온다.
LEAD : n칸 당기기
현재 행을 기준으로 다음 행 또는 n행 후의 데이터를 가져온다.
LAG(컬럼명, offset)
LEAD(컬럼명, offset)
'MySQL' 카테고리의 다른 글
SQL - 날짜 함수 (0) | 2025.01.19 |
---|---|
SQL - 피벗 테이블 (0) | 2025.01.17 |
SQL 문법 - 서브쿼리, CTEs (0) | 2025.01.16 |
SQL 문법 - 조인 (0) | 2025.01.16 |
SQL 문법 - 조건 (0) | 2025.01.15 |