본문 바로가기

알고리즘/SQL

[PROG] LV2 분기별 분화된 대장균의 개체 수 구하기 (MySQL)

문제 링크

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

 

프로그래머스

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

programmers.co.kr

 

풀이

푸는데 어렵진 않다고 느꼈고, 풀긴 풀었다! 

하지만, 조회를 두번하는점에서 쿼리 실행시간이 비효율적일 것 같다.

다른 코드들 보니까 효율적으로 하더라,, 

 

 

코드

-- 각 분기별 분화된 대장균의 총 수 

SELECT SUB.QUARTER, COUNT(E.ID) AS ECOLI_COUNT
FROM ECOLI_DATA AS E 
JOIN (
    SELECT ID, 
        CASE
            WHEN MONTH(DIFFERENTIATION_DATE) <= 3 THEN '1Q'
            WHEN MONTH(DIFFERENTIATION_DATE) <= 6 THEN '2Q'
            WHEN MONTH(DIFFERENTIATION_DATE) <= 9 THEN '3Q'
            WHEN MONTH(DIFFERENTIATION_DATE) <= 12 THEN '4Q'
        END AS QUARTER
    FROM ECOLI_DATA
) AS SUB
ON E.ID = SUB.ID
GROUP BY SUB.QUARTER
ORDER BY QUARTER;

 

 

이런 훌륭한 풀이가 있다니..

-- 각 분기별 분화된 대장균의 총 수 
SELECT 
    CONCAT(QUARTER(DIFFERENTIATION_DATE), 'Q') AS QUARTER,
    COUNT(ID) AS ECOLI_COUNT
FROM ECOLI_DATA
GROUP BY QUARTER
ORDER BY QUARTER;
CONCAT(CEIL(MONTH(DIFFERENTIATION_DATE) / 3), 'Q') QUARTER

이렇게 해도 분기처리된다!