상세 컨텐츠

본문 제목

프로그래머스 LEVEL4 [입양시각구하기2] ORACLE

DataBase/프로그래머스

by Chan.94 2021. 10. 26. 09:58

본문

반응형

OUTER JOIN과 계층형 쿼리를 이용하여 풀 수 있다.

계층형 쿼리를 사용하지 않고 서브 쿼리로 0~23시간을 UINON으로 이어 붙여서도 가능하다.

하지만 코딩테스트나 개념을 정리하기 위함이라면 계층형 쿼리를 사용하여 풀어보는 것이 더 도움이 될 것 같다.

 

 

코딩테스트 연습 - 입양 시각 구하기(2)

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물

programmers.co.kr


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

반응형

관련글 더보기

댓글 영역

>