[SQL]윈도우 함수 vs GROUP BY

Oni·2023년 7월 5일
0

SQL

목록 보기
3/15

정의

  • 행과 행간의 관계를 쉽게 연산,비교,정의하기 위한 함수
  • 행과 행간의 관계란 행간 값끼리의 순위, 순서, 집계 등을 의미한다.

ex

  • '금액'컬럼을 기준으로 행 간 순위를 구해야 하는 경우
  • 특정 행의 값이 전체에서 차지하는 비율을 구해야 하는 경우
  • n일전 값 등 상대적인 위치를 고려한 값을 구해야 하는 경우

문법

3가지의 포인트를 기억하자.
1. 주로 SELECT절에서 사용됨
2. 윈도우함수는 OVER()와 함께 붙어다님
3. 어떤 컬럼을 기준으로 행간 관계를 볼 것인지 정해줘야 할 때 : OVER()안에 PARTITION BY, ORDER BY [컬럼] 입력

# VER.1 
SELECT [WINDOW_FUNCTION]() OVER(PARTITION BY [컬럼]) 
FROM [TABLE]

# VER.2
SELECT [WINDOW_FUNCTION]() OVER(ORDER BY [컬럼])
FROM [TABLE]

# VER.3
SELECT [WINDOW_FUNCTION]() OVER(PARTITION BY [컬럼] ORDER BY [컬럼]) [ALIAS]
FROM [TABLE]

종류

  • 일반함수가 있고 윈도우 전용함수가 있다.
구분함수
순위 함수RANK, DENSE_RANK, ROW_NUMBER
일반 집계함수SUM, MAX, MIN, AVG, COUNT
그룹 내 행 순서 함수FIRST_VALUE, LAST_VALUE, LAG, LEAD
그룹 내 비율 함수RATIO_TO_REPROT, PERCENT_RANK, CUME_DIST, NTITLE

Window Function vs GROUP BY

앞서 언급한 윈도우함수 중에는 SUM,MAX 등 익숙한 일반 집계함수도 있다.
GROUP BY한 뒤에 SUM() 사용해주면 되는데 굳이 일반 집계함수를 윈도우함수로도 활용하는 이유가 무엇일까?

생각해보자!
우리에게 친숙한 GROUP BY로 묶어주고 COUNT()를 사용하면
1. 행의 수가 줄어든다. -> 테이블의 구조가 변경됨.
2. SELECT할 수 있는 컬럼이 수치형 컬럼의 집계로 한정된다.
결국 윈도우함수는 집약 기능은 없고 연산 기능만 있는 GROUP BY와 같은 의미라고 이해할 수 있다.


Window Function 장점

  • 쿼리 길이가 짧아짐 (가독성 증가)
  • 테이블의 구조는 유지하면서 집계 값도 같이 보고싶을 때 적절

Reference

  • SQL레벨업(미크, 한빛미디어)
profile
데이터 분석/엔지니어링/ML에 관한 기록

0개의 댓글