코딩테스트 연습 - 입양 시각 구하기(2)
ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물
programmers.co.kr
지난 문제 '입양 시각 구하기(1)' 이랑 똑같은 문제인 줄 알았으나 아니었다!
SELECT EXTRACT(HOUR FROM CAST (DATETIME AS TIMESTAMP)) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
WHERE EXTRACT(HOUR FROM CAST (DATETIME AS TIMESTAMP)) BETWEEN 0 AND 23
GROUP BY EXTRACT(HOUR FROM CAST (DATETIME AS TIMESTAMP))
ORDER BY EXTRACT(HOUR FROM CAST (DATETIME AS TIMESTAMP))
이렇게 하니

실패......

정답은!

이렇게 나와야한다!
방법은
0 to 23 hour 목록 생성 후 join

다른 블로거의 풀이를 따라했다.
대단하다.
SELECT R.lv HOUR, NVL(ANI.COUNT,0) COUNT
FROM
(SELECT EXTRACT(HOUR FROM CAST (DATETIME AS TIMESTAMP)) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
WHERE EXTRACT(HOUR FROM CAST (DATETIME AS TIMESTAMP)) BETWEEN 0 AND 23
GROUP BY EXTRACT(HOUR FROM CAST (DATETIME AS TIMESTAMP))
ORDER BY HOUR) ANI,
(SELECT (LEVEL-1)lv FROM dual CONNECT BY LEVEL <=24)R
WHERE R.lv = ANI.HOUR(+) ORDER BY R.lv
내 코드
SELECT R.lv, NVL(E.cnt,0)
FROM
(SELECT TO_CHAR(DATETIME,'HH24') as HOUR ,COUNT(*) cnt
FROM ANIMAL_OUTS GROUP BY TO_CHAR(DATETIME,'HH24')
ORDER BY HOUR)E,
(SELECT (LEVEL-1)lv FROM dual CONNECT BY LEVEL <=24)R
WHERE R.lv = E.HOUR(+) ORDER BY R.lv
출처: https://blue-boy.tistory.com/195 [코딩배우는 학생]
ㅁ참고
[Oracle] dual 다중조회 (connect by level)
더미테이블 dual 로 조회시 하나의 행을 조회 가능하다. 하지만 connect by level 을 사용하면 다중 행 조회가 가능하다. SELECT LEVEL FROM DUAL CONNECT BY LEVEL LEVEL 을 인덱스로 이용하여 다양한 값을 뽑..
dpdpwl.tistory.com
[PROGRAMMER Level-4] 입양 시각 구하기(2)[Oracle]
문제 설명 ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는..
blue-boy.tistory.com
'COMPUTER > 프로그래머스' 카테고리의 다른 글
[Python]구명보트 (0) | 2021.11.22 |
---|---|
[Python] 주식가격 (0) | 2021.11.16 |
[Oracle]ORA-01422: exact fetch returns more than requested number of rows 오류! (0) | 2021.11.03 |
[python][2021 KAKAO BLIND RECRUITMENT] 순위 검색 (0) | 2021.10.26 |
[Python](스택/큐)기능개발 (0) | 2021.10.12 |
댓글