윈도우 함수는 여러 가지 연산을 한 번에 할 수 있는 기능을 가지고 있다.
GROUP BY안의 GROUP BY라던지, 집계도 가능하고, 데이터의 위치 변경, 순서 부여할 수 있다.
1. 집계함수
SELECT MAX(column_name1) OVER (PATITION BY column_name2) FROM tables
--column_name2별 column_name1에서 가장 큰 값 출력
SELECT MIN(column_name1) OVER (PATITION BY column_name2) FROM tables
--column_name2별 column_name1에서 가장 작은 값 출력
SELECT SUM(column_name1) OVER (ORDER BY column_name2 PATITION BY column_name3) FROM tables
--column_name3별로 column_name2의 순서대로 column_name1의 누적합 출력
SELECT AVG(column_name1) OVER (PATITION BY column_name2) FROM tables
--column_name2별로 column_name1의 평균을 출력
2. 데이터 위치 변경
SELECT LAG(column_name1, step, default_value) OVER (ORDER BY column_name2)
FROM tables
--column_name2를 기준으로 step만큼의 단위로 column_name1의 값들을 아래로 움직인다.
--이때 빈 값들은 default_value로 채운다. (옵션이 없을시 NULL값으로 대체)
SELECT LEAD(column_name1, step, default_value) OVER (ORDER BY column_name2)
FROM tables
--column_name2를 기준으로 step만큼의 단위로 column_name1의 값들을 위로 움직인다.
--이때 빈 값들은 default_value로 채운다. (옵션이 없을시 NULL값으로 대체)
3. 순서 부여
SELECT ROW_NUMBER() OVER (ORDER BY column_name),
-- index처럼 한줄마다 순서 부여
RANK() OVER (ORDER BY column_name),
--동순위가 존재할 경우 같은 순위를 부여하고, 그 다음에 오는 값에는 row_number()에 들어가는 값을 준다.
DENSE_RANK() OVER (ORDER BY column_name)
--동순위가 존재할 경우 가터은 순위를 부여하고, 그 다음에 오는 값에는 그 다음 순서를 부여
FROM tables
(참고 자료 - https://www.inflearn.com/users/@datarian 의 [백문이불여일타] 데이터 분석을 위한 고급, 중급, 기초 SQL)
'섭섭의 공부 > SQL' 카테고리의 다른 글
[HackerRank] Select All (0) | 2021.11.20 |
---|---|
[MySQL] 사용자 정의 함수 (0) | 2021.08.19 |
[MySQL] 서브쿼리 (0) | 2021.08.19 |
[MySQL] DML(Data Manipulation Language), INSERT, UPDATE, DELETE (0) | 2021.08.18 |
[MySQL] UNION, UNION ALL 데이터 위 아래 병합 (0) | 2021.08.02 |