Jay's Cookbook
Menu
  • Tags
  • Categories
  • Projects
Computer Science
OS
Network
Data Structure
Algorithm
Language
Code Architecture
Python
Javascript
Typescript
Java
Backend
Backend Theory
TypeORM
Node.js
NestJS
FastAPI
Frontend
HTML/CSS
React
Next.js
Data Engineering
DE Theory
MySQL
MongoDB
Elastic
Redis
Kafka
Spark
Airflow
AI
Basic
Pytorch
NLP
Computer Vision
Data Analytics
Statistics
Pandas
Matplotlib
DevOps
Git
Docker
Kubernetes
AWS
[MySQL] DML(3): SELECT 중급 WINDOW
data_engineering
mysql

[MySQL] DML(3): SELECT 중급 WINDOW

Jay Kim
Jay Kim 13 Mar 2021
[MySQL] DML(2): SELECT 중급 JOIN, SUBQUERY [MySQL] DML(4): INSERT, UPDATE, DELETE

Table of Contents

  • 윈도우 함수
  • OVER절
  • 윈도우 함수 예시
    • ROW_NUMBER()
    • RANK()
    • DENSE_RANK()
    • LEAD()
    • LAG()

윈도우 함수

  • 특정 범위마다 함수를 적용하는 것을 윈도우 함수라고 함
  • MySQL에서 제공하는 윈도우 함수라고 따로 정의해둔 윈도우 함수 묶음이 있음
  • 집계 함수도 OVER절을 이용해 범위를 정의하면 윈도우 함수로 사용할 수 있음(Most aggregate functions also can be used as window functions, MySQL 공식문서)
  • 사용 방법: [윈도우 함수] + OVER or [집계 함수] + OVER
  • 범위마다 함수를 적용한다는 점에서 GROUP BY와 비슷하게 느껴지지만, GROUP BY는 집계된 결과를 테이블로 보여주는 반면, 윈도우 함수는 집계된 결과를 기존 테이블에 하나의 열로 추가하여 결과를 볼 수 있음

OVER절

  • 윈도우 함수는 항상 OVER절과 함께 사용됨
  • 2018년에 MySQL에 처음으로 윈도우 함수가 도입되었고, 윈도우 함수는 OVER절을 통해 접근할 수 있음
  • 윈도우 함수는 set of rows에 특별한 함수 또는 계산을 위한 용도. 이러한 set of rows를 window라고 함
  • 이러한 윈도우가 OVER절에 의해 정의됨
  • OVER clause which has three possible elements: partition definition, order definition, and frame definition.
    {window_function(expression)] | [aggregation_function(expression)} OVER ( 
     [partition_defintion]
     [order_definition]
     [frame_definition]
    )
    
  • PARTITION BY: 윈도우 범위 결정
  • ORDER BY: 정렬하여 계산

윈도우 함수 예시

ROW_NUMBER()

  • 행 번호를 매길 수 있음

RANK()

  • 윈도우 내에서 순위를 매길 수 있음
  • 공동 2등이 2명이면 다음은 4등 -> 1, 2, 2, 4

DENSE_RANK()

  • 윈도우 내에서 순위를 매길 수 있음
  • 공동 2등이 2명 있더라도 다음은 3등 -> 1, 2, 2, 3

LEAD()

  • 현재 행에서 다음에 있는 행들과 관계를 맺을 수 있음

LAG()

  • 현재 행 앞에 있는 행들과 관계를 맺을 수 있음
[MySQL] DML(2): SELECT 중급 JOIN, SUBQUERY [MySQL] DML(4): INSERT, UPDATE, DELETE

You may also like

See all mysql
12 Jul 2022 [MySQL] SQL을 이용한 데이터 분석에서 겪었던 다양한 경험들
data_engineering
mysql

[MySQL] SQL을 이용한 데이터 분석에서 겪었던 다양한 경험들

11 Jul 2022 [MySQL] SQL 문제
data_engineering
mysql

[MySQL] SQL 문제

03 Jul 2022 [MySQL] 그라파나를 이용해 MySQL 서버 모니터링 하기
data_engineering
mysql

[MySQL] 그라파나를 이용해 MySQL 서버 모니터링 하기

Jay Kim

Jay Kim

Web development, data engineering for human for the Earth. I share posts, free resources and inspiration.

Rest
Lifestyle
Hobby
Hobby
Hobby
Hobby
2025 © Jay's Cookbook. Crafted & Designed by Artem Sheludko.