IT/SQL

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

무지개는 환상 2024. 1. 29. 09:47

<ANIMAL_OUTS> 테이블 구조

ANIMAL_OUTS 테이블

 

<문제>

 

 

 

<문제 풀이>

SELECT
    HOURS.HOUR,
    COUNT(ANIMAL_OUTS.ANIMAL_ID) AS COUNT
FROM
    (SELECT 0 AS HOUR
     UNION SELECT 1
     UNION SELECT 2
     UNION SELECT 3
     UNION SELECT 4
     UNION SELECT 5
     UNION SELECT 6
     UNION SELECT 7
     UNION SELECT 8
     UNION SELECT 9
     UNION SELECT 10
     UNION SELECT 11
     UNION SELECT 12
     UNION SELECT 13
     UNION SELECT 14
     UNION SELECT 15
     UNION SELECT 16
     UNION SELECT 17
     UNION SELECT 18
     UNION SELECT 19
     UNION SELECT 20
     UNION SELECT 21
     UNION SELECT 22
     UNION SELECT 23) AS HOURS
LEFT JOIN
    ANIMAL_OUTS ON HOURS.HOUR = HOUR(ANIMAL_OUTS.DATETIME)
GROUP BY
    HOURS.HOUR
ORDER BY
    HOURS.HOUR;

 

처음 풀때는 간단하게 테이블을 입양된 시각으로 그룹하여 문제를 풀었다.

하지만 그러면 입양되지 않은 시간에 대한 컬럼이 존재하지 않았다.

 

그래서 아예 0~23에 대한 컬럼을 새로 만들었다!

그 후 해당 컬럼을 기준으로 ANIMAL_OUTS 테이블을 left join 하였다. 

조인하는 키값은 입양시각에 대한 시각으로 하였다. 그 후 각 HOURS 컬럼 기준으로 GROUP 과 ORDER 절을 작성하였다.

 

처음 막혔을때 당황했지만 이렇게 해야지 라고 생각한 뒤로는 보니 SQL 쿼리가 단순하게 짜여진것 같아서 신기하다.

테이블 구조에 대한 이해와 쿼리 구문능력이 좀 더 능수능란 했으면 좋겠다..!

 

출처 : 프로그래머스 - 입양 시각 구하기(2)