🔗 문제 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
)
↓
- YEAR 기준으로 그룹 나누기
- 각 그룹에서 MAX(SIZE) 계산
- 계산 결과를 각 행에 붙이기
- 원본 행은 그대로 유지
PARTITION BY란?
: GROUP BY처럼 같은 값을 가진 행끼리 그룹을 나누는 역할
기본 문법:
PARTITION BY 컬럼명
예:
PARTITION BY YEAR(DIFFERENTIATION_DATE)
→ 연도별로 그룹 생성
2019 그룹
2020 그룹
2021 그룹
각 그룹 안에서 집계 수행
OVER()란?
: 윈도우 함수가 어떤 기준으로 계산될지 정의
기본 문법:
OVER (
PARTITION BY 컬럼
)
의미:
컬럼 기준으로 그룹을 나누고, 각 그룹 내에서 집계 함수 실행
'SQL Coding Test > [Programmers]' 카테고리의 다른 글
| [Programmers] 오랜 기간 보호한 동물(2) (Lv.3) (0) | 2026.05.26 |
|---|---|
| [Programmers] 조건에 맞는 개발자 찾기 (Lv.2) (0) | 2026.05.24 |
| [Programmers] 업그레이드 된 아이템 구하기 (Lv.2) (0) | 2026.05.23 |
| [Programmers] 조건에 맞는 사원 정보 조회하기 (Lv.2) (0) | 2026.05.21 |
| [Programmers] 가격대 별 상품 개수 구하기 (Lv.2) (0) | 2026.05.21 |