Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

집 짓는 개발블로그

[프로그래머스] 분기별 분화된 대장균의 개체 수 구하기 (MySQL) - Alias와 "'따옴표'", MONTH, DAY, CASE-WHEN-THEN-ELSE-END 본문

MySQL

[프로그래머스] 분기별 분화된 대장균의 개체 수 구하기 (MySQL) - Alias와 "'따옴표'", MONTH, DAY, CASE-WHEN-THEN-ELSE-END

취준er 2024. 6. 27. 02:25

 

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

 

프로그래머스

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

programmers.co.kr

문제 요약: 주어진 DATETIME 타입의 데이터에서 MONTH()함수로 월을 추출해서 분기 컬럼을 새로 만들어준 뒤, 분기로 GROUP BY하고 COUNT()를 쓰면 된다.

 

 

소요시간: 7분

그런데 7분이 중요한 게 아니고 이 문제 풀다가 엄청난 걸 알았다. 인라인 뷰(FROM절에 쓰는 서브쿼리)에 alias는 ' ' 로 감싸서 붙였더니 안 되더라..? 

왜? 왜? 왜?

왜..?

 

 

아래 글에서 알아봤다. 

2024.06.27 - [MySQL] - (MySQL) Alias 그리고 따옴표(' ', " ")

 

(MySQL) Alias 그리고 따옴표(' ', " ")

2024.06.27 - [MySQL] - [프로그래머스] 분기별 분화된 대장균의 개체 수 구하기 (MySQL) - Alias와 "'따옴표'", MONTH, DAY, CASE-WHEN-THEN-ELSE-END [프로그래머스] 분기별 분화된 대장균의 개체 수 구하기 (MySQL) - Al

comeseemycode.tistory.com

 

 

기념으로 일괄적으로 작은따옴표를 벗겨낸 진짜 정답을 올려둔다.

나는 이제 새로 태어난다. 따옴표 없는 세상에서...

 

정답1

WITH QUARTERED AS (SELECT CONCAT((CASE 
        WHEN MONTH(DIFFERENTIATION_DATE) < 4 THEN '1'
        WHEN MONTH(DIFFERENTIATION_DATE) < 7 THEN '2'
        WHEN MONTH(DIFFERENTIATION_DATE) < 10 THEN '3'
        ELSE '4'
        END
       ), 'Q') AS QUARTER, 
       ID
FROM ECOLI_DATA)

SELECT QUARTER, COUNT(ID) AS ECOLI_COUNT
FROM QUARTERED
GROUP BY QUARTER
ORDER BY QUARTER;

나는 WITH AS로 서브쿼리를 만들고  공통 테이블 표현식(Common Table Expression, CTE)을 정의하는 방법을 자주 사용한다.

서브쿼리 겹겹이 괄호로 싸여있으면 헷갈리기도 하고, 내가 직접 이름을 지어줄 수 있으니 직관적이기도 하고, 미리 필요한 테이블을 만들어두고 필요하면 조인하기 쉬워서 좋아한다. 

 

 

 

정답2

SELECT QUARTER, COUNT(ID) AS ECOLI_COUNT
FROM (SELECT CONCAT((CASE 
        WHEN MONTH(DIFFERENTIATION_DATE) < 4 THEN '1'
        WHEN MONTH(DIFFERENTIATION_DATE) < 7 THEN '2'
        WHEN MONTH(DIFFERENTIATION_DATE) < 10 THEN '3'
        ELSE '4'
        END
       ), 'Q') AS QUARTER, 
       ID
FROM ECOLI_DATA) AS SUB
GROUP BY QUARTER
ORDER BY QUARTER;

이건 인라인 뷰를 사용한 버전.

 

하 하 오늘 너무 졸려서 그냥 자려고 했는데 한 문제라도 풀길 잘했다. 몰랐으면 이대로 암살당할 뻔 했다.

역시 공부는 꾸~준~히~🎵❤️