OUTER JOIN과 계층형 쿼리를 이용하여 풀 수 있다.
계층형 쿼리를 사용하지 않고 서브 쿼리로 0~23시간을 UINON으로 이어 붙여서도 가능하다.
하지만 코딩테스트나 개념을 정리하기 위함이라면 계층형 쿼리를 사용하여 풀어보는 것이 더 도움이 될 것 같다.
SQL (ORACEL)
SELECT
LEV.HOUR AS HOUR
,COUNT(TO_NUMBER(TO_CHAR(OUTS.DATETIME, 'HH24'))) AS COUNT
FROM ANIMAL_OUTS OUTS
,(SELECT
LEVEL - 1 AS HOUR
FROM DUAL
CONNECT BY LEVEL <= 24) LEV
WHERE LEV.HOUR = TO_NUMBER(TO_CHAR(OUTS.DATETIME(+), 'HH24'))
GROUP BY LEV.HOUR
ORDER BY LEV.HOUR
;
해설
SELECT
LEVEL - 1 AS HOUR
FROM DUAL
CONNECT BY LEVEL <= 24
계층형 쿼리에 대해 정리가 필요하다면 (계층형 쿼리 START WITH CONNECT BY 사용법) 포스팅을 확인하기 바란다.
LEVEL은 계층의 DEPTH를 뜻하고 최상위는 1 레벨이다. 우리는 0시간부터 필요하기에 -1을 해준다.
WHERE LEV.HOUR = TO_NUMBER(TO_CHAR(OUTS.DATETIME(+), 'HH24'))
LEV가 0~23시간을 표현하고있고 OUTS가 동물들이 입양 간 시각 데이터를 가지고 있기에 OUTER JOIN
프로그래머스 LEVEL2 [입양시각구하기1] ORACLE (0) | 2021.10.22 |
---|---|
프로그래머스 LEVEL4 [보호소에서 중성화한 동물] ORACLE (0) | 2021.10.02 |
프로그래머스 LEVEL3 [오랜 기간 보호한 동물(1)] ORACLE (0) | 2021.10.01 |
프로그래머스 LEVEL3 [있었는데요 없었습니다] ORACLE (0) | 2021.09.29 |
프로그래머스 LEVEL3 [없어진 기록 찾기] ORACLE , MYSQL (0) | 2021.09.16 |
댓글 영역