< 문제 >

SELECT H.HOUR `HOUR`, COUNT(A.DATETIME) `COUNT`
FROM (
    SELECT 0 AS HOUR    # << 여기서 HOUR는 문자가 아닌, 함수를 가리킵니다.
    UNION
    SELECT 1
    UNION
    SELECT 2
    UNION
    SELECT 3
    UNION
    SELECT 4
    UNION
    SELECT 5
    UNION
    SELECT 6
    UNION
    SELECT 7
    UNION
    SELECT 8
    UNION
    SELECT 9
    UNION
    SELECT 10
    UNION
    SELECT 11
    UNION
    SELECT 12
    UNION
    SELECT 13
    UNION
    SELECT 14
    UNION
    SELECT 15
    UNION
    SELECT 16
    UNION
    SELECT 17
    UNION
    SELECT 18
    UNION
    SELECT 19
    UNION
    SELECT 20
    UNION
    SELECT 21
    UNION
    SELECT 22
    UNION
    SELECT 23
) AS H
LEFT JOIN ANIMAL_OUTS AS A
ON H.HOUR = HOUR(A.DATETIME)
GROUP BY H.HOUR
ORDER BY H.HOUR

< 정답 및 설명 >

 

 

- FROM 절의 서브쿼리에서 HOUR 함수로 0~23까지 UNION 연결로 지정해줍니다.

 

- LEFT JOIN을 통해 서브쿼리 부분을 기준으로 잡아줍니다.

 

- 기준인 서브쿼리와 ANIMAL_OUTS 테이블의 공통 부분을 HOUR 함수로 묶어줍니다.

 

- 출력의 기준이될 각 0~23시에 해당하는 H.HOUR로 그룹화합니다.

< 문제 >

< 정답 및 설명 >

 

SELECT HOUR(DATETIME) AS `HOUR`, COUNT(DATETIME) AS `COUNT`
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
HAVING HOUR >= 9 AND HOUR <= 19      # 9시~ 19시 사이의 시간
ORDER BY HOUR;

- HOUR(DATETIME) : HOUR 함수를 통해 DATETIME 칼럼의 시간 이하에 해당하는 부분(=시분초)를 가리킬 수 있다.

 

+ Recent posts