보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
문제링크
조건정리
풀이
SELECT HOUR(datetime) AS hour,
COUNT(*) AS count
FROM animal_outs
GROUP BY hour
ORDER BY hour
0 ~ 6시까지의 데이터가 없었다🥲
입양이 발생하지 않아서 그런 건데, 이것까지 출력하는 방법은 도저히 모르겠어서 구글링 ..
WITH RECURSIVE
사용 WITH RECURSIVE hours AS(
SELECT 0 AS hour
UNION ALL
SELECT hour + 1 FROM hours WHERE hour < 23
)
SELECT h.hour,
COUNT(o.datetime) AS count
FROM hours h
LEFT JOIN animal_outs o ON h.hour = HOUR(o.datetime)
GROUP BY h.hour
ORDER BY h.hour
WITH RECURSIVE
WITH RECURSIVE numbers AS (
SELECT 0 AS num -- 시작값
UNION ALL -- 그냥 UNION ❌
SELECT num + 1 FROM numbers WHERE num < 9 -- ⚠️ 종료조건 필수
)
SELECT * FROM numbers;
다른사람 풀이
SET @hour := -1, @increase := 1; -- 변수 선언
SELECT (@hour := @hour+@increase) HOUR -- hour변수를 1씩 더해줌
, (
SELECT COUNT(*)
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) = @hour
) AS COUNT
FROM ANIMAL_OUTS
WHERE @hour<23
SQL에서도 변수를 선언할 수 있다는 걸 처음 알았다💦