[MySQL] 윈도우 함수 (Window Function)

2024. 1. 18. 15:14· Language/MySQL
목차
  1. 1. 윈도우 함수(Window Function)란?
  2. 2. 윈도우 함수의 종류
  3. 집계 함수
  4. 순위
  5. 데이터 위치 변경
  6. 3. 연습 문제
728x90

 

자꾸 문법을 헷갈려서 잘 이용하지 못한 윈도우 함수..............

윈도우 함수에 대해 정리해보자.

그리고 또 시험에 윈도우 함수가 나온다면 그때는 꼭 잘 사용해보자..!!!!


 

1. 윈도우 함수(Window Function)란?

 

행의 그룹을 만들고 그룹 내에서 계산을 수행하는 기능을 제공하는 함수이다.

 

기본 형태는 다음과 같다.

함수(함수_적용_열) OVER (PARTITION BY 그룹열 ORDER BY 순서열)
  • 순위 함수의 경우, 함수의 인자가 필요하지 않다.
  • PARTITION BY를 기준으로 그룹을 생성하며 ORDER BY를 기준으로 정렬해준다.
  • PARTITION BY, ORDER BY에 넣을 값이 없다면 빈 괄호로 두면 된다.

 

 

2. 윈도우 함수의 종류

 

집계 함수

SUM(), MIN(), MAX(), AVG(), COUNT() 를 활용할 수 있다.

PARTITION BY의 기준별로 나눈 것처럼 결과를 보여주며, ORDER BY의 단위로 집계한다.

 

예를 들어 프로그래머스 즐겨찾기가 가장 많은 식당 정보 출력하기 (Lv.3) 에서 아래 쿼리를 통해 FOOD_TYPE별 FAVORITES 수의 누적합을 구할 수 있다.

SELECT FOOD_TYPE
    , REST_NAME
    , FAVORITES
    , SUM(FAVORITES) OVER (PARTITION BY FOOD_TYPE ORDER BY REST_ID) AS FAV_SUM
FROM REST_INFO

 

실행 결과는 다음과 같다. (일부분)

 

 

순위

ROW_NUMBER(), RANK(), DENSE_RANK()가 있다. ORDER BY에 순위의 기준을 지정해주어야 한다.

 

차이점은 다음과 같다.

  • ROW_NUMBER() : 순위 중복 X. 행 번호와 동일
  • RANK() : 순위 중복 O. 공동 순위만큼 건너 뜀
  • DENSE_RANK() : 순위 중복 O. 공동 순위를 건너 뛰지 않음

RANK를 이용하여 FOOD_TYPE별 FAVORITES의 순위를 구하는 쿼리를 작성해보았다. (동일 문제)

SELECT FOOD_TYPE
    , REST_NAME
    , FAVORITES
    , RANK() OVER (PARTITION BY FOOD_TYPE ORDER BY FAVORITES DESC) AS FAV_SUM
FROM REST_INFO

 

실행 결과는 다음과 같다. (일부분)

 

 

데이터 위치 변경

LAG(), LEAD()가 있다. LAG는 n칸 미루는 함수, LEAD는 n칸 당기는 함수이다.

집계함수의 인자에 열, n, 결측값을 채울 값이 들어간다. n의 기본값은 1, 결측값의 기본값은 null이다.

 

같은 문제에서 REST_NAME을 한 칸 씩 미뤄보았다.

SELECT FOOD_TYPE
    , REST_NAME
    , LAG(REST_NAME) OVER () NAME_LAGGED
FROM REST_INFO

 

실행 결과는 다음과 같다. (일부분)

 

 

3. 연습 문제

아래 두 문제를 Window 함수를 활용하여 풀어보자.

  • 프로그래머스 즐겨찾기가 가장 많은 식당 정보 출력하기 (Lv.3)
  • 프로그래머스 그룹별 조건에 맞는 식당 목록 출력하기 (Lv.4)

 

 


참고자료

 

  • AI가 알려주는 MySQL - 데이터 마스터로 가는 첫걸음
  • [MySQL] 윈도우함수(Window Function)

 

728x90

'Language > MySQL' 카테고리의 다른 글

Mac MySQL Workbench 접속 안됨 및 종료 이슈 해결  (0) 2023.04.24
[생활코딩] 4일차 - 4. JOIN  (0) 2022.04.24
[생활코딩] 3일차 - 3. CRUD : Update, Delete  (0) 2022.04.17
[생활코딩] 3일차 - 2. CRUD : Read  (0) 2022.04.17
[생활코딩] 3일차 - 1. CRUD : Create  (0) 2022.04.17
  1. 1. 윈도우 함수(Window Function)란?
  2. 2. 윈도우 함수의 종류
  3. 집계 함수
  4. 순위
  5. 데이터 위치 변경
  6. 3. 연습 문제
'Language/MySQL' 카테고리의 다른 글
  • Mac MySQL Workbench 접속 안됨 및 종료 이슈 해결
  • [생활코딩] 4일차 - 4. JOIN
  • [생활코딩] 3일차 - 3. CRUD : Update, Delete
  • [생활코딩] 3일차 - 2. CRUD : Read
zeomzzz
zeomzzz
zeomzzz
zeom blog
zeomzzz
전체
오늘
어제
  • 분류 전체보기
    • TIL
      • 2024
    • Problem Solving
      • Algorithm
      • Problem Solving
    • Framework & Library
      • Spring & SpringBoot
      • React
    • Language
      • Java
      • Python
      • C#
      • JavaScript
      • MySQL
      • C
    • DB
      • SQL
      • NoSQL
    • Others
      • DevOps
    • CS
      • 운영체제
      • 네트워크
      • 데이터베이스
    • Tools
      • Git
      • Jira
      • GA
    • Domain
      • Payment
      • Finance & Fintech
    • blog
    • 관심사

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
zeomzzz
[MySQL] 윈도우 함수 (Window Function)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.