본문 바로가기

SQL

[SQL 문제풀이] 입양 시각 구하기(2)-프로그래머스

문제링크

 

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

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/59413#qna

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이

 

ANIMAL_OUTS 테이블에는 입양일 컬럼 DATITME 데이터를 보면 0시 부터 23시까지 모든 시간 데이터가 있지 않다

그래서 예시처럼 0시부터23시까지의 데이터를 추출하려면 어떻게 해야할지 고민하다가 정답을 찾지 못하여 구글 검색을 한 결과 오라클 CONNECT BY LEVEL 쿼리를 사용하면 된다는 것을 알게됐다.

CONNECT BY LEVEL 쿼리로 0부터 24까지 데이터가 있는 임시테이블을 만들고

월별로 COUNT를 뽑은 ANIMAL_OUTS 테이블과 아우터 조인을 하였다.

 

 

쿼리

SELECT 
B.HOUR,
NVL(A.COUNT,0) AS COUNT
FROM
    (SELECT 
    TO_CHAR(DATETIME, 'HH24') AS HOUR,
    COUNT(1) AS COUNT
    FROM
    ANIMAL_OUTS
    GROUP BY TO_CHAR(DATETIME, 'HH24')
    ) A, 
    (
    SELECT LEVEL-1 AS HOUR
    FROM DUAL
    CONNECT BY LEVEL <= 24
    ) B
WHERE A.HOUR(+) = B.HOUR
ORDER BY B.HOUR ASC
;