240613_TIL

J Lee·2024년 6월 13일
0

아무리 사소하더라도 배움이 없는 날은 없다.

SQL 코드카타 73번

그 동안 어떻게 푸는지를 몰라서 묵혀놨던 73번 문제.

시간대별로 입양건수를 조회하는 문제인데,
입양이 없는 시간대도 명시해서 0으로 세어 줘야 하는 게 문제였다.
테이블에 있는 데이터로만 시간대별로 쪼개서 조회하면

SELECT Date_format(datetime, '%H') AS HOUR,
       Count(*)                    AS COUNT
FROM   animal_outs
GROUP  BY 1
ORDER  BY 1 


결과가 이렇게 나오는데,
입양 건수가 없는 0시부터 6시까지, 그리고 20시~23시를 표기할 수가 없어서
이렇게만 제출하면 오답이 뜬다. 따라서 어제 풀었던 문제들에서 썼던
재귀적CTE를 써서 0시부터 23시의 비어있는 시간대부터 만들어 주고
ANIMAL_OUTS의 결과와 join해야 한다.

아래는 정답 쿼리와 조회 결과.

WITH recursive hour
AS
  (
         SELECT 0 AS n
         UNION ALL
         SELECT n+1
         FROM   hour
         WHERE  n<23)
  SELECT    n                  AS HOUR,
            count(a.animal_id) AS COUNT
  FROM      hour h
  LEFT JOIN animal_outs a
  ON        h.n = date_format(a.datetime,'%H')
  GROUP BY  1

profile
기본기를 소홀히 하지 말자

0개의 댓글

관련 채용 정보