본문 바로가기
Skills/SQL

[프로그래머스] SQL - '분기별 분화된 대장균의 개체 수 구하기' 문제풀이

by 602yu 2024. 4. 17.

 

 

문제 링크입니다.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

문제 설명

 

 

 

 

문제

 

각 분기(QUARTER)별 분화된 대장균의 개체의 총 수(ECOLI_COUNT)를 출력하는 SQL 문을 작성해주세요. 이때 각 분기에는 'Q' 를 붙이고 분기에 대해 오름차순으로 정렬해주세요. 대장균 개체가 분화되지 않은 분기는 없습니다.

 

 

 

풀이1 - CASE문 사용
SELECT 
    CASE
        WHEN MONTH(DIFFERENTIATION_DATE) <= 3 THEN '1Q'
        WHEN MONTH(DIFFERENTIATION_DATE) <= 6 THEN '2Q'
        WHEN MONTH(DIFFERENTIATION_DATE) <= 9 THEN '3Q'
        ELSE '4Q'
    END AS 'QUARTER',
    COUNT(ID) AS 'ECOLI_COUNT'
FROM ECOLI_DATA
GROUP BY QUARTER
ORDER BY QUARTER

 

CASE 문을 사용하여 DIFFERENTIATION_DATE 열에서 월을 추출하고, 각 월을 해당하는 분기에 매핑했습니다.

 

다음, 각 분기별로 그룹화하여 대장균 개체의 총 수(ECOLI_COUNT) 를 계산했습니다.

 

이때는 QUARTER 함수가 있는지 모르고 직접 분기를 나누었습니다.

 

 

 

풀이2 - QUARTER(), CONCAT() 사용
SELECT CONCAT(QUARTER(DIFFERENTIATION_DATE), 'Q') AS 'QUARTER',
    COUNT(ID) AS 'ECOLI_COUNT'
FROM ECOLI_DATA
GROUP BY QUARTER
ORDER BY QUARTER

 

QUARTER 함수를 사용하여 DIFFERENTIATION_DATE 열에서 분기를 직접 추출했습니다.

CONCAT 함수를 사용하여 추출된 분기 값에 'Q'를 추가하여 표시합니다.

 

두 쿼리는 분기를 계산하는 방식에서 차이가 있습니다.

 

 


 

 

두 쿼리에서 사용된 QUARTER, CONCAT 함수에 대해 간단히 설명하겠습니다:

 

  • QUARTER : DATE 또는 DATETIME 값에서 분기를 추출하는 함수. (1부터 4까지 값 반환)
  • CONCAT : 하나 이상의 문자열을 결합하여 새로운 문자열을 생성하는 함수

 

예시)

QUARTER('2024-04-11')은 2를 반환합니다.

CONCAT('Hello ', 'World')는 'Hello World'를 반환합니다.