CODING TEST/MySQL
Lv2 - 연도별 대장균 크기의 편차 구하기
iamyuunzo
2025. 8. 1. 14:35
📌 문제 정보
- 문제 이름 : 프로그래머스 - (SUM, MAX, MIN) 연도별 대장균 크기의 편차 구하기
- 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/299310
📌 문제 요약
- ECOLI_DATA 테이블 : ID, PARENT_ID, SIZE_OF_COLONY, DIFFERENTIATION_DATE, GENOTYPE
- 분화된 연도(YEAR), 분화된 연도별 대장균 크기의 편차(YEAR_DEV), 대장균 개체의 ID(ID) 를 출력하는 SQL 문을 작성해주세요. 분화된 연도별 대장균 크기의 편차는 분화된 연도별 가장 큰 대장균의 크기 - 각 대장균의 크기로 구하며 결과는 연도에 대해 오름차순으로 정렬하고 같은 연도에 대해서는 대장균 크기의 편차에 대해 오름차순으로 정렬해주세요.
예시)
| ID | PARENT_ID | SIZE_OF_COLONY | DIFFERENTIATION_DATE | GENOTYPE |
| 1 | NULL | 10 | 2019/01/01 | 5 |
| 2 | NULL | 2 | 2019/01/01 | 3 |
| 3 | 1 | 100 | 2020/01/01 | 4 |
| 4 | 2 | 10 | 2020/01/01 | 4 |
| 5 | 2 | 17 | 2020/01/01 | 6 |
| 6 | 4 | 101 | 2021/01/01 | 22 |
출력)
| YEAR | YEAR_DEV | ID |
| 2019 | 0 | 1 |
| 2019 | 8 | 2 |
| 2020 | 0 | 3 |
| 2020 | 83 | 5 |
| 2020 | 90 | 4 |
| 2021 | 0 | 6 |
📌 내 풀이 및 코드
SELECT
YEAR(DIFFERENTIATION_DATE) AS YEAR, -- 연도 추출
MAX(SIZE_OF_COLONY) OVER(PARTITION BY YEAR(DIFFERENTIATION_DATE))
- SIZE_OF_COLONY AS YEAR_DEV, -- 연도별 최대값 - 현재 개체 크기 = 편차
ID -- 개체 ID
FROM ECOLI_DATA
ORDER BY YEAR ASC, YEAR_DEV ASC; -- 연도 오름차순, 편차 오름차순
📌 새로 배운 문법
<-- 이번 문제에서 새로 배운 Java 문법 정리 -->
** 윈도우 함수 **
함수명(컬럼명) OVER (PARTITION BY ... ORDER BY ...)
- OVER이 붙으면 무조건 윈도우 함수.
- PARTITION BY, ORDER BY는 OVER 안에서 윈도우(창)의 범위와 순서를 정해주는 옵션