[프로그래머스] SQL 고득점 Kit/GROUP BY
* [Level 4] 입양 시각 구하기(2): SET
yyndevv
2022. 10. 11. 21:07
[문제]
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
처음 접근: GROUP BY로 코드를 작성하자 DATETIME에 해당되는 시간만 테이블이 완성되어 7~19시까지의 결과만 나옴
SELECT HOUR(DATETIME) HOUR, COUNT(DATETIME) COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
HAVING HOUR >= 0 AND HOUR <= 23
ORDER BY HOUR
데이터베이스에 없는 시간들을 만들어주어야 하므로 0시부터 23시까지의 테이블을 SET 활용하여 새롭게 만든 뒤
각 시간에 해당되는 입양 건수를 세어 출력하면 된다.
정답
SET @HOUR = -1; // HOUR 변수에 -1 값 입력
SELECT @HOUR := @HOUR + 1 AS HOUR, // HOUR 변수에 HOUR+1 을 대입 → WHERE 절 조건 23 미만일 때까지
(SELECT COUNT(*)
FROM ANIMAL_OUTS
WHERE @HOUR = HOUR(DATETIME)) AS COUNT // HOUR 변수와 시간이 같을 때 카운트
FROM ANIMAL_OUTS
WHERE @HOUR < 23