- WITH 절을 이용하여 가상 테이블 만들어 주기
WITH 테이블명 AS
(
SELECT 쿼리
UNION ALL
SELECT 쿼리
)
=> WITH절로 만들어진 데이터베이스는 저장되는 테이블이 아닌 임시테이블이다.
생성 이후 쿼리문에서 계속 사용 가능하다.
문제
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
나의 정답
SELECT B.n , IFNULL(A.COUNT,0) AS COUNT
FROM (
SELECT
HOUR(DATETIME) AS HOUR,
COUNT(DATETIME) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR
) A
RIGHT JOIN(
WITH RECURSIVE cte AS (
SELECT 0 AS n
UNION ALL
SELECT n + 1 FROM cte WHERE n < 23
)
SELECT n FROM cte
) B ON A.HOUR = B.n ;
먼저 이 문제 DB에서는 7시부터 19시 까지의 시간대별 데이터만 있어서 이외의 시간의 데이터를 별도로 생성해줘야했다.
그렇기 때문에 WITH 절을 사용하여 해당 시간대까지의 칼럼을 생성해주었다. 그 후 기존의 있는 테이블과 RIGHT JOIN을 하여 해당 시간대 별의 입양 건수를 조회하였다. RIGHT JOIN을 하는 이유는 생성한 CTE 테이블의 값은 모두 유지되어야 하기때문에 RIGHT JOIN을 하였다.
'SQL' 카테고리의 다른 글
| [SQL] 나만의 기본적인 문법 정리 (2) (1) | 2024.03.17 |
|---|---|
| [SQL] 나만의 기본적인 문법 정리 (1) (0) | 2024.03.11 |
| [SQL] 간단한 SQL OUTER JOIN 구문 복습하기 (0) | 2023.08.03 |
| [SQL] 간단한 SQL JOIN 과 GROUP BY 결합 구문 복습 (0) | 2023.07.29 |
| [SQL] 간단한 SQL COUNT 구문 복습 (3) | 2023.07.27 |