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

[SQL-DATE] 프로그래머스 Lv. 2 분기별 분화된 대장균의 개체 수 구하기 [다시 풀어 보기] 본문

SQL/다시 풀어 보기

[SQL-DATE] 프로그래머스 Lv. 2 분기별 분화된 대장균의 개체 수 구하기 [다시 풀어 보기]

스위태니 2024. 12. 21. 16:52

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/299308

틀린 코드

SELECT
    CASE MONTH(DIFFERENTIATION_DATE)
        WHEN BETWEEN 1 AND 3 THEN 1Q
        WHEN BETWEEN 4 AND 6 THEN 2Q
        WHEN BETWEEN 7 AND 9 THEN 3Q
        WHEN BETWEEN 10 AND 12 THEN 4Q
    END AS QUARTER,
    COUNT(*) AS ECOLI_COUNT
FROM ECOLI_DATA
GROUP BY QUARTER
ORDER BY QUARTER;

수정 코드

SELECT
    CASE
        WHEN MONTH(DIFFERENTIATION_DATE) BETWEEN 1 AND 3 THEN '1Q'
        WHEN MONTH(DIFFERENTIATION_DATE) BETWEEN 4 AND 6 THEN '2Q'
        WHEN MONTH(DIFFERENTIATION_DATE) BETWEEN 7 AND 9 THEN '3Q'
        WHEN MONTH(DIFFERENTIATION_DATE) BETWEEN 10 AND 12 THEN '4Q'
    END AS QUARTER,
    COUNT(*) AS ECOLI_COUNT
FROM ECOLI_DATA
GROUP BY QUARTER
ORDER BY QUARTER;

개선 코드

SELECT
    CONCAT(QUARTER(DIFFERENTIATION_DATE), 'Q') AS QUARTER,
    COUNT(*) AS ECOLI_COUNT
FROM ECOLI_DATA
GROUP BY QUARTER
ORDER BY QUARTER;

풀이 과정

 

  1. QUARTER() 함수 사용:
    • MySQL에서는 QUARTER() 함수로 날짜의 분기를 손쉽게 계산할 수 있다.
    • 결과는 1, 2, 3, 4로 반환되므로, CONCAT()를 사용하여 'Q'를 붙인다.
  2. CONCAT():
    • CONCAT(QUARTER(DIFFERENTIATION_DATE), 'Q')는 숫자로 반환되는 분기에 문자열 'Q'를 결합해 '1Q', '2Q', '3Q', '4Q'로 출력한다.
  3. COUNT(*):
    • 각 분기별로 대장균 개체의 총 개수를 계산한다.
  4. GROUP BY QUARTER:
    • 분기(QUARTER) 기준으로 데이터를 그룹화한다.
  5. ORDER BY QUARTER:
    • 분기 순으로 결과를 오름차순 정렬한다.

 

느낀점

  • 내장 함수에 대해서 잘 알고 있으면 문제를 풀기 쉽다.