윈도우 함수는 여러 가지 연산을 한 번에 할 수 있는 기능을 가지고 있다.

 

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)

+ Recent posts