[SQL] 연도별 대장균 크기의 편차 구하기

2024. 5. 5. 23:52코딩 테스트

문제

 

 

개념
  • JOIN문의 ON에서도 컬럼에서 함수를 쓸 수 있다.
  • 다른 방법으로 풀 때 WINDOW함수를 쓰면 효율적이다.(아래 블로그 글 참조)
 

[SQL] 윈도우 함수 (WINDOW FUNCTION)

WINDOW FUNCTION 개요 행과 행 간의 관계를 쉽게 정의하기 위해 만든 함수가 윈도우 함수다. 윈도우 함수는 분석 함수나 순위 함수로도 알려져 있다. 윈도우 함수는 기존에 사용하던 집계 함수도 있

moonpiechoi.tistory.com

 

 

정답
WITH MS AS 
(
    SELECT 
        YEAR(DIFFERENTIATION_DATE) AS YEAR,
        MAX(SIZE_OF_COLONY) AS MAX_SIZE
    FROM ECOLI_DATA
    GROUP BY YEAR(DIFFERENTIATION_DATE)
)
SELECT 
    YEAR(E.DIFFERENTIATION_DATE) YEAR,
    M.MAX_SIZE - E.SIZE_OF_COLONY AS YEAR_DEV,
    E.ID
FROM ECOLI_DATA E JOIN MS M ON YEAR(E.DIFFERENTIATION_DATE) = M.YEAR
ORDER BY 1, 2

-- WINDOW 함수 사용
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, YEAR_DEV ASC