몸과 마음이 건전한 SW 개발자

[SQL-MAX] 프로그래머스 Lv. 2 연도별 대장균 크기의 편차 구하기 [다시 풀어 보기] 본문

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;

풀이 과정

  1. WITH YEARLY_MAX
    • 연도별로 가장 큰 대장균의 크기(MAX(SIZE_OF_COLONY))를 계산한다.
    • 연도는 YEAR(DIFFERENTIATION_DATE)로 추출하고, 이를 기준으로 그룹화(GROUP BY)한다.
  2. WITH YEARLY_DEV
    • 각 대장균의 연도와 크기, 그리고 해당 연도의 최대 크기와의 편차(YEAR_DEV)를 계산한다.
    • MAX_COLONY - SIZE_OF_COLONY를 통해 편차를 구한다.
    • 이 결과를 연도(YEAR)와 연결하기 위해 JOIN을 사용한다.
  3. 최종 SELECT
    • 결과에서 필요한 열만 선택(YEAR, YEAR_DEV, ID)한다.
    • 결과를 연도(YEAR)에 대해 오름차순, 편차(YEAR_DEV)에 대해 오름차순 정렬한다.

느낀점

  • 이런 문제가 레벨 2라는데 거짓말치지 말자
728x90