상세 컨텐츠

본문 제목

[MySQL 프로그래머스 풀이]: Lv.2 / 분기별 분화된 대장균의 개체 수 구하기

SQL 코딩테스트

by Corn/sec 2025. 3. 4. 22:54

본문

오늘은 프로그래머스의 SQL 문제인 "변종 바이러스의 확산"을 해결하는 두 가지 접근 방식을 비교하며, SQL의 날짜 함수와 CASE WHEN 구문의 활용법을 알아보겠습니다.

[MySQL 프로그래머스] Lv.2 / 분기별 분화된 대장균의 개체 수 구하기

문제 개요

ECOLI_DATA 테이블에서 각 분기별로 변종 바이러스의 발생 건수를 집계하는 것이 목표입니다. 이를 위해 두 가지 SQL 쿼리를 작성해보겠습니다.

1. 첫 번째 접근: CASE WHEN 구문 활용

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

설명

  • MONTH(DIFFERENTIATION_DATE): DIFFERENTIATION_DATE 컬럼에서 월을 추출합니다.
  • CASE WHEN 구문: 추출한 월을 기준으로 분기를 정의합니다.
    • 1월~3월: '1Q'
    • 4월~6월: '2Q'
    • 7월~9월: '3Q'
    • 10월~12월: '4Q'
  • GROUP BY QUARTER: 분기별로 데이터를 그룹화합니다.
  • COUNT(*) AS ECOLI_COUNT: 각 분기별 발생 건수를 계산합니다.

장단점

  • 장점: CASE WHEN 구문을 통해 분기를 직접 정의하므로, 분기 기준을 유연하게 변경할 수 있습니다.
  • 단점: 코드가 다소 길어질 수 있으며, 가독성이 떨어질 수 있습니다.

 

2. 두 번째 접근: QUARTER 함수 활용

더 많은 날짜 및 시간 관련 함수는 여기로

[MySQL] 날짜 및 시간 관련 함수

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

설명

  • QUARTER(DIFFERENTIATION_DATE): DIFFERENTIATION_DATE 컬럼에서 분기를 추출합니다.
  • CONCAT(QUARTER(...), 'Q') AS QUARTER: 추출한 분기에 'Q'를 붙여서 표현합니다.
  • GROUP BY QUARTER(DIFFERENTIATION_DATE): 분기별로 데이터를 그룹화합니다.
  • COUNT(*) AS ECOLI_COUNT: 각 분기별 발생 건수를 계산합니다.

장단점

  • 장점: QUARTER 함수를 사용하여 코드가 간결하고 가독성이 높습니다.
  • 단점: 데이터베이스 시스템에 따라 QUARTER 함수가 지원되지 않을 수 있습니다.