https://school.programmers.co.kr/learn/courses/30/lessons/59413
생각나는대로 짠 결과는 다음과 같다.
SELECT HOUR(datetime) AS hour,
COUNT(animal_id) AS count
FROM animal_outs
GROUP BY hour
ORDER BY hour
hour count
7 | 3 |
8 | 1 |
9 | 1 |
10 | 2 |
11 | 13 |
12 | 10 |
13 | 14 |
14 | 9 |
15 | 7 |
16 | 10 |
17 | 12 |
18 | 16 |
19 | 2 |
문제에서 원하는 hour는 0시부터 23시였기 때문에 .. 이렇게 나오면 정답이 아니게 된다.
뭔가 ... 뇌피셜로는 0부터 23까지의 숫자로 이루어진 column을 하나 만들고 WITH 사용해서 임시 테이블로 만들어준 후에 그 테이블이랑 이 결과랑 LEFT JOIN 하면 될거같은데 연속된 숫자로 이루어진 column 만드는 법을 모른다;
그래서 다른 풀이를 찾아봤다 !
https://chanhuiseok.github.io/posts/db-6/
찾아보니까 SET 함수라는 쿼리문에서 로컬 변수를 만드는 함수를 사용해야한다.
진짜 처음들어봤다 ...
SET @변수명 := 초기값;
-- @가 붙은 변수는 프로시저가 종료되어도 유지됨 --> 0부터 23까지의 값을 누적시키기 위해 필요
-- := 는 대입 연산자
최종적인 정답은 다음과 같다.
SET @hour := -1; -- hour 변수 선언
SELECT (@hour := @hour + 1) AS hour, -- hour가 0부터 시작하게끔 해줌
(SELECT COUNT(*)
FROM animal_outs
WHERE HOUR(datetime) = @hour) AS count
FROM animal_outs
WHERE @hour < 23 -- @hour가 22인 경우까지만 반복 --> 23까지 column 값이 될 수 있음 (22+1)
'SQL > 문제풀이' 카테고리의 다른 글
[프로그래머스] 그룹별 조건에 맞는 식당 목록 출력하기 📌 (0) | 2024.02.12 |
---|---|
[프로그래머스] 5월 식품들의 총매출 조회하기 (0) | 2024.02.12 |
[프로그래머스] 년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2024.02.12 |
[프로그래머스] 식품분류별 가장 비싼 식품의 정보 조회하기 📌 (0) | 2024.02.12 |
[프로그래머스] 조건에 부합하는 중고거래 댓글 조회하기 (0) | 2024.02.11 |