집 짓는 개발블로그
[프로그래머스] 분기별 분화된 대장균의 개체 수 구하기 (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
문제 요약: 주어진 DATETIME 타입의 데이터에서 MONTH()함수로 월을 추출해서 분기 컬럼을 새로 만들어준 뒤, 분기로 GROUP BY하고 COUNT()를 쓰면 된다.
소요시간: 7분
그런데 7분이 중요한 게 아니고 이 문제 풀다가 엄청난 걸 알았다. 인라인 뷰(FROM절에 쓰는 서브쿼리)에 alias는 ' ' 로 감싸서 붙였더니 안 되더라..?
왜? 왜? 왜?
왜..?
아래 글에서 알아봤다.
2024.06.27 - [MySQL] - (MySQL) Alias 그리고 따옴표(' ', " ")
기념으로 일괄적으로 작은따옴표를 벗겨낸 진짜 정답을 올려둔다.
나는 이제 새로 태어난다. 따옴표 없는 세상에서...
정답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;
이건 인라인 뷰를 사용한 버전.
하 하 오늘 너무 졸려서 그냥 자려고 했는데 한 문제라도 풀길 잘했다. 몰랐으면 이대로 암살당할 뻔 했다.
역시 공부는 꾸~준~히~🎵❤️
'MySQL' 카테고리의 다른 글
(MySQL) Alias 그리고 따옴표(' ', " ") (1) | 2024.06.27 |
---|---|
MySQL DATE_FORMAT 정리 (0) | 2024.06.27 |
[프로그래머스] 노선과 평균 역 사이 거리 조회하기 (MySQL) (0) | 2024.06.24 |
[프로그래머스] 업그레이드 된 아이템 구하기 (MySQL) - INNER JOIN으로 NULL 바로 제거하기, EXISTS (0) | 2024.06.23 |
[프로그래머스] LV.3 숫자 게임 (Python) - deque (0) | 2024.06.22 |