SQL/다시 풀어 보기
[SQL-MAX] 프로그래머스 Lv. 2 연도별 대장균 크기의 편차 구하기 [다시 풀어 보기]
스위태니
2024. 12. 19. 17:18
728x90
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/299310
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
틀린 코드
SELECT YEAR(DIFFERENTIATION_DATE) AS YEAR,
(MAX(SELECT E2.SIZE_OF_COLONY
FROM ECOLI_DATA E2) - E1.SIZE_OF_COLONY) AS YEAR_DEV
FROM ECOLI_DATA E1;
정답 코드
WITH YEARLY_MAX AS (
SELECT
YEAR(DIFFERENTIATION_DATE) AS YEAR,
MAX(SIZE_OF_COLONY) AS MAX_COLONY
FROM ECOLI_DATA
GROUP BY YEAR(DIFFERENTIATION_DATE)
),
YEARLY_DEV AS (
SELECT
YEAR(D.DIFFERENTIATION_DATE) AS YEAR,
D.ID,
D.SIZE_OF_COLONY,
Y.MAX_COLONY - D.SIZE_OF_COLONY AS YEAR_DEV
FROM ECOLI_DATA D
JOIN YEARLY_MAX Y
ON YEAR(D.DIFFERENTIATION_DATE) = Y.YEAR
)
SELECT
YEAR,
YEAR_DEV,
ID
FROM YEARLY_DEV
ORDER BY YEAR ASC, YEAR_DEV ASC;
풀이 과정
- WITH YEARLY_MAX
- 연도별로 가장 큰 대장균의 크기(MAX(SIZE_OF_COLONY))를 계산한다.
- 연도는 YEAR(DIFFERENTIATION_DATE)로 추출하고, 이를 기준으로 그룹화(GROUP BY)한다.
- WITH YEARLY_DEV
- 각 대장균의 연도와 크기, 그리고 해당 연도의 최대 크기와의 편차(YEAR_DEV)를 계산한다.
- MAX_COLONY - SIZE_OF_COLONY를 통해 편차를 구한다.
- 이 결과를 연도(YEAR)와 연결하기 위해 JOIN을 사용한다.
- 최종 SELECT
- 결과에서 필요한 열만 선택(YEAR, YEAR_DEV, ID)한다.
- 결과를 연도(YEAR)에 대해 오름차순, 편차(YEAR_DEV)에 대해 오름차순 정렬한다.
느낀점
- 이런 문제가 레벨 2라는데 거짓말치지 말자
728x90