MySQL
[SQL 문제풀이] 입양 시각 구하기(2)-프로그래머스
illho
2023. 5. 23. 15:39
문제 링크
ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다.
https://school.programmers.co.kr/learn/courses/30/lessons/59413
문제 풀이
재귀 쿼리인 WITH RECURSIVE를 사용하여 0부터 23까지 출력하는 가상 테이블을 만들었다.
ANIMAL_OUTS 테이블과 가상테이블을 조인하여 GROUP BY를 0부터 23까지의 컬럼으로 하고
ANIMAL_ID 컬럼을 COUNT 한다.
쿼리
WITH RECURSIVE HOURS AS (
SELECT 0 AS HOUR1
UNION ALL
SELECT HOUR1 + 1 FROM HOURS WHERE HOUR1<23
)
SELECT
HOUR1,
COUNT(ANIMAL_ID)
FROM HOURS
LEFT JOIN ANIMAL_OUTS B
ON HOURS.HOUR1 = HOUR(B.DATETIME)
GROUP BY HOUR1
;
다른 방법
SET @HOUR := -1;
SELECT (@HOUR := @HOUR +1) AS HOUR,
(SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @HOUR) AS COUNT
FROM ANIMAL_OUTS
WHERE @HOUR < 23
SET 함수를 이용한 풀이이다.
SET함수를 이용해서 0~23까지의 테이블을 만든다.
@HOUR = -1은 변수에 -1값을 넣는다는 의미이다.
ANIMAL_OUTS 의 시간과 SET 함수로 만든 테이블의 HOUR 값이 같을때 카운트를 한다.