본문 바로가기
알고리즘/프로그래머스

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

by pandastic 2025. 5. 12.
반응형

 

 

 

 

우선 작성한 시간대별로 출력하는 코드를 작성했다.

SELECT DATE_FORMAT(DATETIME, '%H') HOUR, COUNT(ANIMAL_ID) COUNT
FROM ANIMAL_OUTS
GROUP BY 1
ORDER BY 1 ASC

 

조건에 따르면 0시부터 23시까지 나와야되는데 위의 코드는 결과에서 보이듯, 값이 있는 시간대만 출력한다.

 

CASE WHEN으로 0시부터 23시까지 다 짜고 싶지 않아서 방법을 찾아보았다.

WITH RECURSIVE 구문으로 가상테이블을 생성하여 0부터 23까지 증가하도록 만드는 방법이 있었다.

 

MySQL :: MySQL 8.4 Reference Manual :: 15.2.20 WITH (Common Table Expressions)

15.2.20 WITH (Common Table Expressions) A common table expression (CTE) is a named temporary result set that exists within the scope of a single statement and that can be referred to later within that statement, possibly multiple times. The following disc

dev.mysql.com

 

[ 최종 답안 ]

WITH RECURSIVE TIME AS(
   SELECT 0 AS HOUR
    UNION ALL
    SELECT HOUR + 1 FROM TIME
    WHERE HOUR < 23
)
SELECT T.HOUR, COUNT(HOUR(A.DATETIME)) AS COUNT
FROM TIME T LEFT JOIN ANIMAL_OUTS A
ON T.HOUR =  HOUR(A.DATETIME)
GROUP BY T.HOUR;

 

 

 

[ 참고한 블로그 ]

 

[MySql] 임시 테이블 1부터 10까지

쿼리를 짜다보면 기준 테이블로 1부터 10까지 혹은 1부터 100까지 있는 임시 테이블을 쿼리로 어떻게 짜야하나 싶을때가 있다. 그럴땐 with 문을 활용하자. 이렇게 해준다면 이렇게 깔끔한 결과가

allmana.tistory.com

 

 

[MYSQL] 📚 RECURSIVE (재귀 쿼리)

WITH RECURSIVE 문 (재귀 쿼리) 프로그래밍에서 재귀 함수를 들어봤듯이, SQL에서도 재귀 쿼리 기법이 존재한다. 다만 문법이 굉장히 해괴한데 우선 WITH RECURSIVE 쿼리문을 작성하고 내부에 UNION을 통해

inpa.tistory.com

 

[MySQL] 계층 쿼리 - WITH, WITH RECURSIVE 사용법

Common Table Expression (CTE) WITH 구문은 메모리 상에 가상의 테이블을 저장할 때 사용된다. RECURSIVE의 여부에 따라 재귀, 비재귀 두 가지 방법으로 사용 가능하다. WITH [RECURSIVE] TABLE명 AS ( SELECT - # 비반

horang98.tistory.com

 

반응형