분화된 연도(YEAR), 분화된 연도별 대장균 크기의 편차(YEAR_DEV), 대장균 개체의 ID(ID) 를 출력하는 SQL 문을 작성해주세요. 분화된 연도별 대장균 크기의 편차는 분화된 연도별 가장 큰 대장균의 크기 - 각 대장균의 크기로 구하며 결과는 연도에 대해 오름차순으로 정렬하고 같은 연도에 대해서는 대장균 크기의 편차에 대해 오름차순으로 정렬해주세요.
https://school.programmers.co.kr/learn/courses/30/lessons/299310
SELECT s.YEAR, (s.max_size - e.SIZE_OF_COLONY) AS YEAR_DEV, e.ID
FROM ECOLI_DATA e
INNER JOIN (
## 연도별 최고 대장균 크기
SELECT MAX(SIZE_OF_COLONY) AS max_size, YEAR(DIFFERENTIATION_DATE) AS YEAR
FROM ECOLI_DATA
GROUP BY YEAR(DIFFERENTIATION_DATE)
) s
ON YEAR(e.DIFFERENTIATION_DATE) = s.YEAR
ORDER BY YEAR, YEAR_DEV
ON YEAR(e.DIFFERENTIATION_DATE) = s.YEAR 이 부분에서 ON e.YEAR(DIFFERENTIATION_DATE) = s.YEAR 으로 YEAR에 e.을 붙여 말도 안되는 함수를 사용했었음... 이것만 아니면 저걸로 풀텐데...)WITH MaxColonyByYear 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,
(s.MAX_SIZE - e.SIZE_OF_COLONY) AS YEAR_DEV,
e.ID
FROM ECOLI_DATA e
INNER JOIN MaxColonyByYear s
ON YEAR(e.DIFFERENTIATION_DATE) = s.YEAR
ORDER BY YEAR, YEAR_DEV
WITH 을 이용해서 결합하자는 형식으로 하는데 결국 여기서 동일한 방식의 ON이 있어서 사실상 CTE vs 서브쿼리 대결이다.