Mo!
(프로그래머스) SQL Level 4 [입양 시각 구하기(2)] Oracle 풀이 본문
SQL

(프로그래머스) SQL Level 4 [입양 시각 구하기(2)] Oracle 풀이

5사 2021. 11. 30.

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/59413

 

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

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

programmers.co.kr

 

LEFT OUTER JOIN을 이용한 풀이

설명 

( select level-1 h_num
         from dual
         connect by level <= 24 ) a

-- 0에서 23까지의 숫자를 뽑기 : level을 활용한 쿼리 

 

( select extract(hour from cast(datetime as timestamp)) h_time, count(*) cnt
         from animal_outs
         group by extract(hour from cast(datetime as timestamp)) ) b

-- EXTRACT 함수 사용

-- 뽑아내야 할 것은 시간(hour)이므로 datetime 칼럼을 CAST를 통해 TIMESTAMP 형식으로 변환

-- 시간대 별 입양건수 세기 : GROUP BY로 묶은 후 COUNT 하기

 

* 왜 TIMESTAMP 형식으로 변환해야 하는가?

HOUR, MINUTE, SECOND는 TIMESTAMP 형식일 때 추출된다

YEAR, MONTH, DATE는 DATE 형식일 때 추출된다

TIMESTAMP는 YEAR, MONTH, DATE, HOUR, MINUTE, SECOND 모두 추출할 수 있다

 

left outer join 

-- 위의 두 테이블(a, b)을 left outer join 하였음

-- 조건을 on a.h_num = b.h_time으로 하여 조건에 해당하지 않는 COUNT는 null이 되게 하였음

 

select a.h_num as "HOUR", nvl(b.cnt, 0) as "COUNT"

-- 0에서 23까지의 숫자 출력 

-- left outer join으로 인해 null값이 된 COUNT를 0으로 변환하여 출력(nvl 활용)

Comments