[고득점 SQL kit] - 41**

Dreamer ·2023년 1월 14일
0

고득점 SQL KIT

목록 보기
7/53

1. quiz

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

2. answer

WITH RECURSIVE table_1 AS (
    SELECT 0 AS HOUR
    UNION ALL
    SELECT HOUR+1 FROM table_1 WHERE HOUR < 23
) , table_2 AS (
    SELECT HOUR(DATETIME) AS HOUR
         , COUNT(DISTINCT ANIMAL_ID) AS C
    FROM ANIMAL_OUTS
    GROUP BY HOUR
)

SELECT table_1.HOUR
     ,CASE WHEN table_2.C IS NULL THEN 0 ELSE C END AS C
FROM table_1
    LEFT JOIN table_2 ON table_1.HOUR = table_2.HOUR
ORDER BY HOUR
  • WITH 구문 이후에 오는 쿼리에서 임시 테이블의 테이블명을 사용하여 값을 참조할 수 있다.
WITH CTE AS (
    SELECT 0 AS NUM
    UNION ALL
    SELECT 0 FROM SOME_TABLE # SOME_TABLE의 행 수만큼 반복된다.
)
  • WITH RECURSIVE 구문은 가상 테이블을 생성하면서 가상 테이블 자신의 값을 참조하여 값을 결정할 때 사용된다.
WITH RECURSIVE CTE AS(
    SELECT 0 AS NUM # 초기값 설정
    UNION ALL
    SELECT NUM+1 FROM CTE
    WEHRE NUM < 10 # 반복을 멈추는 조건
)
profile
To be a changer who can overturn world

0개의 댓글