▶ 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대 별로 그룹함수