본문 바로가기

Backend/SQL

[프로그래머스_SQL] 연도별 대장균 크기의 편차 구하기 #JOIN

 

MySQL

SELECT YEAR(a.DIFFERENTIATION_DATE) as YEAR
    , (b.MAX_SIZE - a.SIZE_OF_COLONY) as YEAR_DEV
    , a.ID
FROM ECOLI_DATA a
LEFT
JOIN(
    SELECT YEAR(DIFFERENTIATION_DATE) as YEAR
        , MAX(SIZE_OF_COLONY) as MAX_SIZE
    FROM ECOLI_DATA
    GROUP BY YEAR(DIFFERENTIATION_DATE)
    ) as b
ON YEAR(a.DIFFERENTIATION_DATE) = b.YEAR
ORDER BY YEAR ASC, YEAR_DEV ASC;

 

서브 쿼리를 이용하여 LEFT JOIN을 수행합니다.

각 연도의 최대값을 구하고, 각 행마다 연도의 최대값과의 차이를 계산합니다.

 

잘못된 방법

SELECT YEAR(DIFFERENTIATION_DATE) as YEAR
    , (MAX(SIZE_OF_COLONY) - SIZE_OF_COLONY) as YEAR_DEV
    , ID
FROM ECOLI_DATA
GROUP BY YEAR(DIFFERENTIATION_DATE);

 

GROUP BY로 묶여있기 때문에 이렇게 작성하면 연도별 데이터가 압축되어, ID, SIZE_OF_COLONY의 값이 나오지 않습니다.

따라서 서브 쿼리를 활용해야 합니다.