공부기록장

[mySQL] 프로그래머스 입양시각구하기(2) recursive함수 사용해서 본문

▶ study/SQL

[mySQL] 프로그래머스 입양시각구하기(2) recursive함수 사용해서

친절한 3 2021. 4. 7. 18:26

1. 문제

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다.

NAME                              TYPE                               NULLABLE

ANIMAL_ID

VARCHAR(N)

FALSE

ANIMAL_TYPE

VARCHAR(N)

FALSE

DATETIME

DATETIME

FALSE

NAME

VARCHAR(N)

TRUE

SEX_UPON_OUTCOME

VARCHAR(N)

FALSE

보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

 

2. 풀이 방법

- 0~23까지 나타나는 임시테이블을 생성한다.

- 임시테이블과 기존의 테이블을 left join한다.

- 임시테이블의 시간대별로 group by를 해준다.

- select문에 count를 삽입하여 결과를 도출한다.

 

3. 코드

with recursive time as ( #time이라고 하는 임시테이블 생성
    select 0 as hour #초기값을 설정, 컬럼명을 hour로 설정
    union all
    select hour+1 #for문처럼 조건을 줄 행의 값의 연산 삽입 
    from time  
    where hour < 23 #조건을 끝내줄 용도의 코드 삽입
) 
select time.hour, count(animal_id)
from time left join animal_outs ao 
on time.hour = hour(ao.datetime) #time table과 animal_outs table 조인
group by time.hour; #time대 별로 그룹함수

 

Comments