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 안에서 윈도우(창)의 범위와 순서를 정해주는 옵션