자두의 데브로그

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

코딩테스트/SQL

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

왕자두 2024. 10. 11. 14:02

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

 

프로그래머스

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

programmers.co.kr

 

재귀 쿼리로 풀면 될 것 같다고 생각했는데 나의 착각이었다고 한다.

변수 사용하면 되는 문제였는데 세션 변수를 사용해서 문제를 풀어봤다.

 

세션 변수

  • SQL 쿼리에서 선언 후 사용
  • @ 기호를 사용하여 선언
  • 세션이 유지되는 동안 사용 가능
SET @my_var = 10;

SELECT @my_var; -- 10 반환

SELECT column_name
FROM table_name
WHERE column_name > @my_var;

 

문제에서는 23까지의 hour을 구하면 되고, 해당 hour에 대한 count 값을 가지면 되니까 select 절에서 서브쿼리로 count(*) 값 가져오면된다. 이때 마지막 where 절이 가장 마지막에 실행되는 게 아니라 select가 순서상 가장 마지막에 실행되므로, where 절에서는 23보다 작을 때까지의 조건으로 실행하면 된다.

set @hour := -1;
SELECT (@hour := @hour + 1) as HOUR, (select count(*) from ANIMAL_OUTS where hour(DATETIME) = @hour) as count
from ANIMAL_OUTS
where @hour < 23;