[프로그래머스] 입양 시각 구하기(2) - MySQL 본문

코테 문제 풀이/SQL

[프로그래머스] 입양 시각 구하기(2) - MySQL

미니모아 2022. 5. 6. 18:16
반응형

입양 시각 구하기(2)

문제

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

풀이

WITH RECURSIVE HOURS AS (
    SELECT 0 AS HOUR
    UNION ALL
    SELECT HOUR + 1 FROM HOURS
    WHERE HOUR < 23
)
​
SELECT HOUR, IFNULL(TMP.COUNT, 0) AS COUNT
FROM HOURS
LEFT OUTER JOIN (
    SELECT HOUR(DATETIME) AS HOUR, COUNT(*) AS COUNT 
    FROM ANIMAL_OUTS
    GROUP BY HOUR
) TMP
USING (HOUR)

재귀 테이블

재귀하면서 0부터 23을 포함하는 테이블을 만든다.

Left outer join

left outer join의 뜻은 왼쪽 테이블은 조건에 부합하지 않아도 모든 컬럼을 포함해야된다는 뜻이다.

IFNULL(TMP.COUNT, 0)

조인한 테이블의 COUNT 컬럼이 NULL일 경우 0으로 넣는다. (재귀 테이블에 없는 경우)

반응형
Comments