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의 값이 나오지 않습니다.
따라서 서브 쿼리를 활용해야 합니다.
'Backend > SQL' 카테고리의 다른 글
[프로그래머스_SQL] 특정 옵션이 포함된 자동차 리스트 구하기 #LIKE (2) | 2025.02.10 |
---|---|
[프로그래머스_SQL] NULL 처리하기 #IFNULL #NVL (1) | 2025.02.09 |
[프로그래머스_SQL] 상위 n개 레코드 LIMIT, ROWNUM (0) | 2025.01.14 |
[프로그래머스_SQL] 12세 이하인 여자 환자 목록 출력하기 IFNULL, NVL (3) | 2025.01.04 |
[프로그래머스_SQL] 과일로 만든 아이스크림 고르기 (1) | 2024.12.27 |