본문 바로가기
공부/코딩테스트 | 알고리즘

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

by 나는 유찌 2022. 2. 15.

 

 

코딩테스트 연습 - 입양 시각 구하기(2)

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물

programmers.co.kr

 

프로그래머스 코딩테스트 SQL 문제를 풀며 정리하는 내용입니다.

 

환경은 MySQL로 설정했습니다 😃

 

 

문제 및 결과 예시


문제
결과

 

 

풀이 과정


 

SELECT  HOUR(DATETIME) AS HOUR
        , COUNT(*) AS COUNT
FROM    ANIMAL_OUTS
WHERE   HOUR(DATETIME) BETWEEN 0 AND 23
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATETIME);

처음에는 이렇게 작성을 하고 결과를 확인하였더니..

 

프로그래머스에서 제공해준 결과 예시에는 COUNT 수가 0개인 항목들도 출력이 되어야 하는데

위의 쿼리로는 0개의 항목들은 나오지 않았다.

 

구글링을 한 결과 SET을 사용하면 된다는 답변을 얻었고 내 쿼리를 수정하였다.

 

 

1. 일단 SET을 통해서 변수를 선언해주고 0부터 23까지 출력되도록 만들었다.

SET @HOUR = -1;

SELECT  (@HOUR := @HOUR + 1) AS HOUR
FROM    ANIMAL_OUTS
WHERE   @HOUR < 23;

 

2. 선언한 HOUR 변수의 값과 기존 내가 작성한 쿼리를 JOIN을 걸어 시간을 매핑시켜주었다.

SET @HOUR = -1;

SELECT  (@HOUR := @HOUR + 1) AS HOUR
        , IFNULL(B.COUNT, 0) AS COUNT
FROM    ANIMAL_OUTS A
        LEFT OUTER JOIN (
            SELECT  HOUR(DATETIME) AS HOUR
                    , COUNT(*) AS COUNT
            FROM    ANIMAL_OUTS
            WHERE   HOUR(DATETIME) BETWEEN 0 AND 23
            GROUP BY HOUR(DATETIME)
            ORDER BY HOUR(DATETIME)
        ) B ON @HOUR + 1 = B.HOUR
WHERE   @HOUR < 23;

 

 


저도 많이 부족한 실력이기에 위의 쿼리가 당연히 정답은 아닙니다 😀 !

피드백 주시면 감사히 받겠습니다 🙌