최대 1 분 소요

문제 링크

정답

-- ANIMAL_OUTS: ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME
SELECT HOUR(DATETIME) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR
HAVING HOUR BETWEEN 9 AND 19
ORDER BY HOUR;

✅ Point

  • COUNT(*) 와 COUNT(HOUR(DATETIME)) 의 차이
    • COUNT(*): NULL을 포함한 전체 행 수
    • COUNT(HOUR(DATETIME)): NULL 값을 제외한 행 수
  • COUNT(HOUR) 처럼 SELECT 문에서 선언한 별칭은 SELECT 실행 시 선언 됨
    • 따라서 SELECT문 이전에 시행되거나 (), 동일한 SELECT문에선 별칭을 사용할 수 없음
    • SQL의 논리적 실행 순서
        1. FROM
        2.   JOIN
        3.     ON
        4. WHERE
        5. GROUP BY
        6. HAVING
        7. SELECT
        8. ORDER BY
        9. LIMIT
      
      • 단, MySQL에선 GROUP BY, HAVING에서의 별칭 사용을 허용