간만에 프로그래머스 따끈 따끈한 문제입니다!!
분화된 연도(
YEAR)
, 분화된 연도별 대장균 크기의 편차(YEAR_DEV
), 대장균 개체의 ID(ID
) 를 출력하는 SQL 문을 작성해주세요. 분화된 연도별 대장균 크기의 편차는 분화된 연도별 가장 큰 대장균의 크기 - 각 대장균의 크기로 구하며 결과는 연도에 대해 오름차순으로 정렬하고 같은 연도에 대해서는 대장균 크기의 편차에 대해 오름차순으로 정렬해주세요.
WITH A as(
SELECT ID
, YEAR(DIFFERENTIATION_DATE) AS YEAR
, SIZE_OF_COLONY
, MAX(SIZE_OF_COLONY) OVER (PARTITION BY YEAR(DIFFERENTIATION_DATE)) AS MAX_COLONY
FROM ECOLI_DATA )
SELECT YEAR
, MAX_COLONY - SIZE_OF_COLONY AS YEAR_DEV
, ID
FROM A
ORDER BY YEAR,YEAR_DEV
컬럼명이 굉장히 길기 때문에 ㅎㅎ.. 가독성을 위해서 서브쿼리를 이용했습니다.
연도별 대장균 크기의 편차(
YEAR_DEV
)를 한 테이블안에서 구하기 위해 윈도우 함수를 이용했는데요.🤔MAX(SIZE_OF_COLONY) OVER (PARTITION BY YEAR(DIFFERENTIATION_DATE)) AS MAX_COLONY
이부분에 해당하는 쿼리입니다.
MAX_COLONY
와 SIZE_OF_COLONY
의 값을 빼줘야 하는데 윈도우 함수를 이용하면
아래의 결과처럼 새로운 테이블이 아닌 기존 테이블 내에서 연도별 MAX_COLONY
컬럼 값을 구할 수 있습니다