728x90
WITH
메모리상에 가상의 테이블을 저장할 때 사용된다 (1회만사용가능)
WITH TMP AS
(
SELECT A,B,C
FROM T
WHERE...
)
SELECT ...
FROM TMP #여기서 사용가능
WHERE ...
WITH RECURSVIE
recursive 말 그대로, 자기 자신의 값을 참조하여 값을 가지는 테이블이다
WITH RECURSIVE TMP AS(
SELECT 0 AS NUM # 초기값 0
UNION ALL
SELECT NUM+1 FROM TMP # 초기값 0을 이용하여 테이블 생성
WEHRE NUM < 10 # 반복 정도
)
RECURSIVE 사용시에는 UNION ALL이 필수적이며,
WHERE를 이용하여 정지 조건을 설정한다
이를 이용한 문제
프로그래머스 SQL 고득점 Kit GROUP BY : 입양시각 구하기(2)
-- 코드를 입력하세요
WITH RECURSIVE T AS (
SELECT 0 AS HOUR
UNION ALL
SELECT HOUR+1 AS HOUR
FROM T
WHERE HOUR<23
)
SELECT T.HOUR, COUNT(HOUR(DATETIME))
FROM ANIMAL_OUTS RIGHT OUTER JOIN T
ON HOUR(DATETIME) = HOUR
GROUP BY HOUR
ORDER BY HOUR
포인트는
COUNT가 0인 것도 시간은 보여줘야 하므로
HOUR칸은 T에서 골라야하고
존재하지 않는 행도 COUNT하면 1이 되므로, 이를 방지하기 위해 ANIMAL_OUT에 존재하는 DATETIME만 COUNT에 반영해주는 것
728x90
'Algorithm > TIP' 카테고리의 다른 글
[c++] string내 substring 있는지 찾아내기 (find) (0) | 2023.01.03 |
---|---|
형변환 (0) | 2023.01.03 |
SQL 고득점 Kit [JOIN 시리즈] (1) | 2022.10.28 |
TIP) 'b' - 'a' = 1 (0) | 2022.10.22 |
[c++] compare 함수 (sort / priority queue) (0) | 2022.10.21 |