본문 바로가기

sql/SUM, MAX, MIN

[프로그래머스] 연도별 대장균 크기의 편차 구하기 (MySQL)

문제링크

 

WITH MAX_SIZE_TABLE AS(
    SELECT MAX(SIZE_OF_COLONY) AS MAX_SIZE, YEAR(DIFFERENTIATION_DATE) AS YEAR
    FROM ECOLI_DATA
    GROUP BY YEAR(DIFFERENTIATION_DATE)
    )
    
SELECT YEAR(E.DIFFERENTIATION_DATE) AS YEAR, (M.MAX_SIZE - E.SIZE_OF_COLONY) AS YEAR_DEV, E.ID
FROM ECOLI_DATA AS E
    LEFT JOIN MAX_SIZE_TABLE AS M
    ON YEAR(E.DIFFERENTIATION_DATE) = M.YEAR
ORDER BY YEAR, YEAR_DEV

 

풀이 방법

with as를 써서 임시 테이블을 만듦. (년도별로 묶어서 -> 그 년도의 최대 크기를 구함) -> 그 테이블과 원테이블을 left join. (원테이블 기준 left outer join -> 원테이블 정보 모두 가져올 수 있게)

 

의문

MAX_SIZE_TABLE을 만들 때 그냥 MAX(SIZE_OF_COLONY)로 했을 땐 밑에서 가져올 때 에러가 나더니, AS MAX_SIZE로 별칭을 만들어주고 별칭으로 가져오니 잘 된다. 왜 전에꺼는 안 되지?