SQL/문제풀이

[프로그래머스] 입양 시각 구하기 (2)

응엉잉 2024. 2. 12. 02:22

https://school.programmers.co.kr/learn/courses/30/lessons/59413

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

생각나는대로 짠 결과는 다음과 같다.

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/

 

[프로그래머스] 입양 시각 구하기(1), (2) (GROUP BY, HAVING, SET)

[프로그래머스] 입양 시각 구하기(1), (2)

chanhuiseok.github.io

찾아보니까 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)