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

 

프로그래머스

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

programmers.co.kr

코드설명

CASE WHEN + GROUP BY + CONCAT 를 활용합니다.

 

문제에서 가장 중요한 부분은 SQL에서 각 함수들의 실행순서를 알아야 한다는 것 입니다.

즉, 이 문제에서는 SELECT -> FROM 으로 데이터 로드 -> WHERE 로 데이터 필터링 -> GROUP BY 가 데이터 그룹핑

SELECT의 별칭인 QUARTER를 기반으로 GROUP BY 를 해야한다는 것 입니다.

 

다시 한번 정리하면, GROUP BY 가 실행되는 순서는

SELECT -> FROM -> WHERE -> GROUP BY

위와 같이 적용됩니다. 이를 통하여서 먼저 SELECT로 데이터들을 '1Q', '2Q', '3Q', '4Q'로 나뉜뒤 GROUP BY가 해당 데이터들을 기반으로 그룹핑합니다.

코드

-- 코드를 작성해주세요
SELECT
    CASE
    WHEN MONTH(ED1.DIFFERENTIATION_DATE) < 4 THEN '1Q'
    WHEN MONTH(ED1.DIFFERENTIATION_DATE) < 7 THEN '2Q'
    WHEN MONTH(ED1.DIFFERENTIATION_DATE) < 10 THEN '3Q'
    ELSE '4Q'
    END AS QUARTER,
    COUNT(ED1.ID) AS ECOLI_COUNT
FROM
    ECOLI_DATA AS ED1
GROUP BY QUARTER
ORDER BY QUARTER;

 

코드2입니다.

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

 

만약 CONCAT을 활용할경우

-- 코드를 작성해주세요
SELECT
    CONCAT(CASE
    WHEN MONTH(ED1.DIFFERENTIATION_DATE) < 4 THEN '1'
    WHEN MONTH(ED1.DIFFERENTIATION_DATE) < 7 THEN '2'
    WHEN MONTH(ED1.DIFFERENTIATION_DATE) < 10 THEN '3'
    ELSE '4'
    END, 'Q') AS QUARTER,
    COUNT(ED1.ID) AS ECOLI_COUNT
FROM
    ECOLI_DATA AS ED1
GROUP BY QUARTER
ORDER BY QUARTER;

 

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(*) AS ECOLI_COUNT
FROM ECOLI_DATA AS ED1
GROUP BY QUARTER
ORDER BY QUARTER ASC

+ Recent posts