SQL Coding Test/[Programmers]

[Programmers] 연도별 대장균 크기의 편차 구하기 (Lv.2)

duswn1204 2026. 5. 23. 17:52

🔗 문제 link : https://school.programmers.co.kr/learn/courses/30/lessons/299310


🖥️ 문제 풀이

SELECT
    YEAR(DIFFERENTIATION_DATE) AS YEAR,
    MAX(SIZE_OF_COLONY) OVER (PARTITION BY YEAR(DIFFERENTIATION_DATE)) - SIZE_OF_COLONY AS YEAR_DEV,
    ID
FROM ECOLI_DATA
ORDER BY YEAR ASC, YEAR_DEV ASC;

💡 문제 해결

윈도우 함수(Window Function)란?
: 윈도우 함수는 행을 유지한 채 그룹별 계산 결과를 추가하는 함수
GROUP BY 처럼 그룹으로 묶어 계산하지만, 행 수가 줄어들지 않음

기본 문법

집계함수() OVER (
    PARTITION BY 기준컬럼
)
 

의미:

MAX(SIZE) OVER (
    PARTITION BY YEAR
)
 

  1. YEAR 기준으로 그룹 나누기
  2. 각 그룹에서 MAX(SIZE) 계산
  3. 계산 결과를 각 행에 붙이기
  4. 원본 행은 그대로 유지

PARTITION BY란?
: GROUP BY처럼 같은 값을 가진 행끼리 그룹을 나누는 역할

기본 문법:

PARTITION BY 컬럼명
 

예:

PARTITION BY YEAR(DIFFERENTIATION_DATE)
 

→ 연도별로 그룹 생성

2019 그룹
2020 그룹
2021 그룹
 

각 그룹 안에서 집계 수행


OVER()란?
: 윈도우 함수가 어떤 기준으로 계산될지 정의

기본 문법:

OVER (
    PARTITION BY 컬럼
)
 

의미:

컬럼 기준으로 그룹을 나누고, 각 그룹 내에서 집계 함수 실행