https://school.programmers.co.kr/learn/courses/30/lessons/299308
코드설명
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