입양 시각 구하기(2)

수이·6일 전
0

🟢 코드카타 / SQL

목록 보기
73/81

보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
문제링크

조건정리

  1. 0시부터 23시까지 시간대별 입양 건수
  2. 시간대 순 정렬

풀이

  1. 오답
SELECT HOUR(datetime) AS hour,
       COUNT(*) AS count
FROM animal_outs
GROUP BY hour
ORDER BY hour

0 ~ 6시까지의 데이터가 없었다🥲
입양이 발생하지 않아서 그런 건데, 이것까지 출력하는 방법은 도저히 모르겠어서 구글링 ..

  1. 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

  • 반복적인 데이터 생성 / 계층 구조 탐색
  • 반복 / 재귀 처리 가능

0~9 생성

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에서도 변수를 선언할 수 있다는 걸 처음 알았다💦

0개의 댓글

관련 채용 정보