https://school.programmers.co.kr/learn/courses/30/lessons/299310
코딩테스트 연습 > SUM, MAX, MIN > 연도별 대장균 크기의 편차 구하기
문제 분석
난이도: LEVEL2
문제 요구사항
분화된 연도(YEAR), 분화된 연도별 대장균 크기의 편차(YEAR_DEV), 대장균 개체의 ID(ID) 를 출력하는 SQL 문을 작성해주세요. 분화된 연도별 대장균 크기의 편차는 분화된 연도별 가장 큰 대장균의 크기 - 각 대장균의 크기로 구하며 결과는 연도에 대해 오름차순으로 정렬하고 같은 연도에 대해서는 대장균 크기의 편차에 대해 오름차순으로 정렬해주세요.
Self - Join을 통해서 문제해결
(분화된 연도별 가장 큰 대장균의 크기) 해당 데이터를 얻을려면 셀프 조인이 필요하다.
GROUP BY를 사용해서 연도별로 묶어주고 해당 연도에서 가장 큰 대장균의 크기를 구한다.
SELECT MAX(SIZE_OF_COLONY) MAX_C, YEAR(DIFFERENTIATION_DATE) DATE
FROM ECOLI_DATA
GROUP BY DATE
조인
FROM
ECOLI_DATA A
JOIN
(
SELECT MAX(SIZE_OF_COLONY) MAX_C, YEAR(DIFFERENTIATION_DATE) DATE
FROM ECOLI_DATA
GROUP BY DATE
) C
ON YEAR(A.DIFFERENTIATION_DATE) = C.DATE
INNER JOIN 조건(ON): 연도
내가 틀렸던 부분
문제에서 요구하는 분화된 연도(YEAR)의 타입은 INTEGER이다.
DATE_FORMAT(A.DIFFERENTIATION_DATE, '%Y'): return String
YEAR(DIFFERENTIATION_DATE): return Integer
정답 코드
SELECT
YEAR(A.DIFFERENTIATION_DATE) YEAR,
(C.MAX_C - A.SIZE_OF_COLONY) YEAR_DEV,
A.ID
FROM
ECOLI_DATA A
JOIN
(
SELECT MAX(SIZE_OF_COLONY) MAX_C, YEAR(DIFFERENTIATION_DATE) DATE
FROM ECOLI_DATA
GROUP BY DATE
) C
ON YEAR(A.DIFFERENTIATION_DATE) = C.DATE
ORDER BY
YEAR(A.DIFFERENTIATION_DATE) ASC,
YEAR_DEV ASC
'Algorithm > Programmers SQL' 카테고리의 다른 글
[MySQL] 프로그래머스 특정 물고기를 잡은 총 수 구하기 (2) | 2024.09.07 |
---|---|
[MySQL] 프로그래머스 분기별 분화된 대장균의 개체 수 구하기 (0) | 2024.09.07 |
[MySQL] 프로그래머스 부모의 형질을 모두 가지는 대장균 찾기 (1) | 2024.09.07 |
[MySQL] 프로그래머스 모든 레코드 조회하기 (0) | 2024.09.07 |
[MySQL] 프로그래머스 역순 정렬하기 (0) | 2024.09.07 |