A. 금일 학습 내용

 

1. CTE (Common Table Expression) - 공통 테이블 식

하위 쿼리의 결과를 임시로 정의된 테이블처럼 사용할 수 있음

 with 문

with 임시테이블명 as (
	query)

 

- with recursive 문

서브쿼리에서 스스로를 참조하는 CTE

with recursive 임시테이블명 as(
    select 초기값
    union all
    select 초기값을 이용하여 값을 재귀적으로 수행
    from 임시테이블명
    where 정지조건
    )

 

- recursive 

On computing - relating to or involving a program or routine of which a part requires the application of the whole, so that its explicit interpretation requires in general many successive executions.

: 재귀함수 - 함수에서 자기 자신을 다시 호출해 작업을 수행하는 방식

 

2. 문제에 적용하기

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

- 이 문제의 주 포인트는 0 ~23시까지의 칼럼을 새로 만들어야 한다는 점이다.

- 입양이 일어난 시간은 7~ 19시 사이이므로 그 외 시간을 나타내야 한다.

 

WITH RECURSIVE TIME AS(
SELECT 0 AS NUM
UNION ALL
SELECT NUM+1
FROM TIME
WHERE NUM < 23)

SELECT TIME.NUM AS TIME
    ,COUNT(O.ANIMAL_ID) AS COUNT
FROM ANIMAL_OUTS O
RIGHT JOIN TIME
ON
HOUR(O.DATETIME) = TIME.NUM
GROUP BY TIME.NUM
ORDER BY TIME.NUM

- 0부터 23까지 있는 TIME 테이블을 임시로 생성하였다.

- ANIMAL_OUTS 테이블과 시간을 기준으로 JOIN 하여 문제를 풀었다.

 

B. 마무리

- 프로그래머스의 다른 사람들의 풀이를 보고 따라 풀어보았다. 이 방법 외에 다른 방법을 찾아 풀고 싶다.

- 내가 배운 내용으로도 풀 수 있을 것이라 생각한다.

- 그래도 ETC에 대해 알 수 있어 좋은 시간이었다.

 

+ Recent posts