일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 오퍼레터
- BFS
- incr
- Docker
- 물채우기
- msSQL
- 성적평가
- 기술면접
- dfs
- Kafka
- 연결요소
- 처우산정
- 이분탐색
- 매개변수탐색
- @P0
- 6987
- boj #19237 #어른 상어
- 퇴사통보
- softeer
- 백트래킹
- 처우협의
- BOJ
- OFFSET
- 13908
- 백준
- 파라메트릭
- 소프티어
- compose
- upper_bound
- 경력
- Today
- Total
기술 블로그
with recursive 본문
재귀 with recursive
with recursive
1. 메모리 상에 가상의 테이블을 저장한다. 아래 0 ~ 23을 참고.
2. 반드시 UNION 사용해야한다.
3. 반드시 비반복문도 최소한 1개 요구된다.
4. SubQuery에서 바깥의 가상의 테이블을 참조하는 문장(반복문)이 반드시 필요하다.
5. 반복되는 문장은 반드시 정지조건이 요구된다.
6. 가상의 테이블을 구성하면서 그 자신(가상의 테이블)을 참조하여 값을 결정할 때 유용한다.
1 2 3 4 5 6 7 8 | with recursive rc as ( select 0 as n union select n+1 from rc where n < 23 ) select * from rc; | cs |
위와 같은 구문을 실행하면, 아래와 같은 테이블이 가상으로 만들어진다.
필드명은 n이다.
n < 23이므로, n은 22까지 실행되고 그 작업에는 n + 1 = 22 + 1 = 23까지 실행되어 23까지 출력되는 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | +------+ | n | +------+ | 0 | | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | | 11 | | 12 | | 13 | | 14 | | 15 | | 16 | | 17 | | 18 | | 19 | | 20 | | 21 | | 22 | | 23 | +------+ | cs |
https://unrealengine.tistory.com/163
문제 설명
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문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
예시
SQL문을 실행하면 다음과 같이 나와야 합니다.
HOUR COUNT
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 3
8 1
9 1
10 2
11 13
12 10
13 14
14 9
15 7
16 10
17 12
18 16
19 2
20 0
21 0
22 0
23 0
1 2 3 4 5 6 7 8 9 10 11 | with recursive rc as ( select 0 as n union select n+1 from rc where n < 23 ) select a.n, count(hour(b.datetime)) hour from rc a left join animal_outs b on a.n = hour(b.datetime) group by a.n | cs |
'데이터베이스 > MySql' 카테고리의 다른 글
임시 데이터 생성하기(더미데이터, 테이블) (0) | 2023.11.01 |
---|