[TIL] SQL 윈도우 함수 (Window Function)

2025. 1. 14. 11:59·TIL (Today I Learned)

윈도우 함수 (Window Function)

SQL에서 특정 그룹에 대해 집계 또는 계산을 수행하는 함수이다.
`OVER`절을 통해 윈도우를 정의하며, 특정 그룹 내에서 순서에 따라 계산하거나 누적 통계 값을 구할 수 있다.
기존의 집계 함수(Aggregate Function)와 달리, 원본 데이터를 유지하면서 계산 결과를 추가로 반환한다.

 

윈도우 함수와 집계 함수

특징 윈도우 함수 집계 함수
데이터 유지
여부
그룹 내 계산 결과를 추가로 반환하며,
원본 데이터는 유지한다.
그룹화된 결과만 반환하며,
원본 데이터는 제거한다.
사용 가능
함수
`SUM`, `AVG`, `COUNT`, `ROW_NUMBER`, `RANK`, `NTILE`, `LEAD`, `LAG` 등 `SUM`, `AVG`, `COUNT`, `MAX`, `MIN` 등
`OVER`절
사용
필수.
`OVER`절을 통해 윈도우를 정의
사용 불가.
`GROUP BY`절
사용
필요 없음. 
윈도우 함수는 `GROUP BY` 없이도 개별 행을 기준으로 계산 가능
필수.
집계 함수는 보통 `GROUP BY`와 함께 사용하여 데이터를 그룹화
출력 결과 각 행에 대해 계산된 결과를 추가로 반환. 그룹화된 결과만 반환.

 

윈도우 함수의 기본 구조

<윈도우 함수> OVER (
    [PARTITION BY <컬럼>]  -- 데이터를 그룹화 (선택 사항)
    [ORDER BY <컬럼>]      -- 그룹 내에서 순서를 지정 (선택 사항)
)
  • 윈도우 함수
    • 계산을 수행할 함수
    • 예: SUM, AVG, ROW_NUMBER, RANK, NTILE, LAG, LEAD 등
  • OVER 절
    • 윈도우를 정의하는 절
    • PARTITION BY와 ORDER BY를 조합하여 계산 범위와 순서를 지정
  • PARTITION BY
    • 데이터를 특정 컬럼 값 기준으로 그룹화
    • 그룹화된 각 그룹 내에서 계산을 독립적으로 수행
  • ORDER BY
    • 그룹 내에서 계산 순서를 지정

 

윈도우 함수의 주요 함수

집계 함수

SUM, AVG, COUNT, MAX, MIN 등.
기존 집계 함수와 동일하지만, 윈도우 내에서 작동하며 원본 데이터를 유지.

 

순위 함수

ROW_NUMBER(): 윈도우 내에서 순위를 부여.
RANK(): 동일 값에 동일 순위를 부여하고, 다음 순위는 건너뜀.
DENSE_RANK(): 동일 값에 동일 순위를 부여하되, 순위를 건너뛰지 않음.

 

행 이동 함수

LAG(): 현재 행의 이전 행 값.
LEAD(): 현재 행의 다음 행 값.

 

누적/창 함수

FIRST_VALUE(): 윈도우 내 첫 번째 값.
LAST_VALUE(): 윈도우 내 마지막 값.

 

윈도우 함수 사용 예시

2025.01.14 - [Algorithm Solving/SQL] - [programmers] SQL Lv. 3 - 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기

 

[programmers] SQL Lv. 3 - 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기

https://school.programmers.co.kr/learn/courses/30/lessons/151139 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 설명 다음은 어

mannakingdom.tistory.com

 

저작자표시 비영리 변경금지 (새창열림)

'TIL (Today I Learned)' 카테고리의 다른 글

[Spring] JPA Auditing 적용하기: @CreatedDate, @LastModifiedDate 활용법  (0) 2025.02.07
[TIL] SQL - WITH RECURSIVE 개념과 사용법  (0) 2025.02.06
[Java] 상속(Inheritance)과 다형성(Polymorphism) 이해  (0) 2025.01.10
[Java] 예외 처리 방법: 기본 구조, throw/throws, 사용자 정의 예외  (1) 2025.01.10
[Java] 스택 자료구조: Stack과 Deque 비교  (0) 2025.01.10
'TIL (Today I Learned)' 카테고리의 다른 글
  • [Spring] JPA Auditing 적용하기: @CreatedDate, @LastModifiedDate 활용법
  • [TIL] SQL - WITH RECURSIVE 개념과 사용법
  • [Java] 상속(Inheritance)과 다형성(Polymorphism) 이해
  • [Java] 예외 처리 방법: 기본 구조, throw/throws, 사용자 정의 예외
기만나🐸
기만나🐸
공부한 내용을 기록합시다 🔥🔥🔥
  • 기만나🐸
    기만나의 공부 기록 🤓
    기만나🐸
  • 전체
    오늘
    어제
    • ALL (147)
      • TIL (Today I Learned) (56)
      • Dev Projects (15)
      • Algorithm Solving (67)
        • Java (52)
        • SQL (15)
      • Certifications (8)
        • 정보처리기사 실기 (8)
  • 인기 글

  • 태그

    Subquery
    그리디
    join
    BFS
    greedy
    자료구조
    시뮬레이션
    dp
    javascript
    java
    백준
    BOJ
    다이나믹프로그래밍
    sql
    jpa
    mysql
    Google Fonts
    HTML
    완전탐색
    programmers
    Firebase
    jQuery
    bootstrap
    websocket
    백트래킹
    GROUP BY
    DFS
    jwt
    프로그래머스
    CSS
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기만나🐸
[TIL] SQL 윈도우 함수 (Window Function)
상단으로

티스토리툴바