GROUP BY - 입양 시각 구하기(2)

1. 입양 시각 구하기(2)

A. 문제

위 프로그래머스 사이트에 접속하여 문제를 확인해주세요.

B. 내 답안


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

a. 회고

내 풀이

  • LEVEL CONNECT BY를 사용했다.
    • 번호를 매길때 사용할 수 있다는 것은 알겠지만, 완벽하게 사용법을 숙지하지는 못했다.
  • LEVEL을 구한 인라인 뷰와 입양 시각을 구한 인라인 뷰를 RIGHT OUTER JOIN했다.
    • 0시부터 23시까지의 값을 구하는 문제라서 B 테이블 부분은 전부 살리고 A 테이블에 B 테이블과 매핑되는 값이 없으면 NULL로 처리되게 하는게 최선이라 생각했다.
  • B 테이블의 값 중 A 테이블에 값이 없어서 NULL로 처리된 부분을 0으로 NVL 함수를 사용하여 변경하였다.

참고문헌

GROUP BY. 코딩테스트 연습 - 입양 시각 구하기(2) | 프로그래머스 (programmers.co.kr). Programmers. (accessed Oct 16, 2021)

이 글이 도움이 되었나요?

신고하기
0분 전
작성된 댓글이 없습니다. 첫 댓글을 달아보세요!
    댓글을 작성하려면 로그인이 필요합니다.