SQL
[SQL 문제풀이] 입양 시각 구하기(2)-프로그래머스
illho
2023. 4. 12. 15:53
문제링크
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 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
;