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에 대해 알 수 있어 좋은 시간이었다.
'Today I Learned' 카테고리의 다른 글
[내일배움캠프_데이터분석] 7주차 금요일 TIL _ SQL 문제해결 (0) | 2024.08.09 |
---|---|
[내일배움캠프_데이터분석] 7주차 수요일 TIL _ window function (0) | 2024.08.07 |
[내일배움캠프_데이터분석] 7주차 월요일 TIL _ ADsP 3과목 정리 (0) | 2024.08.05 |
[내일배움캠프_데이터분석] 6주차 금요일 TIL _ 기초통계학 (0) | 2024.08.02 |
[내일배움캠프_데이터분석] 6주차 목요일 TIL _ 구조 생각하기 (0) | 2024.08.01 |