본문 바로가기
공부 일지/문제풀이

[프로그래머스] 분기별 분화된 대장균의 개체 수 구하기 (MySQL)

by Joshbla 2024. 11. 25.

코딩테스트 연습 - 분기별 분화된 대장균의 개체 수 구하기

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제 설명

위와같은 테이블이 있을 때 날짜를 분기에 맞게 나눠서 집계하는 문제다 .

이처럼 만들면 성공


문제 풀이

구현 1 - DATE_FORMAT 사용

SELECT 
	CASE 
	WHEN DATE_FORMAT(DIFFERENTIATION_DATE,'%m%d')<DATE_FORMAT("19990401",'%m%d')
	THEN '1Q'
	WHEN DATE_FORMAT(DIFFERENTIATION_DATE,'%m%d')<DATE_FORMAT("19990701",'%m%d')
	THEN '2Q'
	WHEN DATE_FORMAT(DIFFERENTIATION_DATE,'%m%d')<DATE_FORMAT("19991001",'%m%d')
	THEN '3Q'
	ELSE '4Q'
	END AS QUARTER,
	COUNT(*) AS ECOLI_COUNT
FROM ECOLI_DATA 
GROUP BY QUARTER
ORDER BY QUARTER

처음엔 월, 일만 뽑아와서 날짜형식으로 비교하는 방법을 사용했다.

 

구현 2 - MONTH 사용

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

찾아보니 월만 뽑아주는 함수 MONTH를 발견! 코드가 조금 더 간결해졌다.

 

구현 3 - QUARTER 사용

SELECT CONCAT(QUARTER(DIFFERENTIATION_DATE),'Q') AS QUARTER,
	COUNT(*) AS ECOLI_COUNT
FROM ECOLI_DATA 
GROUP BY QUARTER
ORDER BY QUARTER

아예 분기를 뽑아주는 QUARTER 발견... CONCAT으로 아예 "Q"까지 합쳐버렸다.