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

박진우·2022년 10월 26일
0

SQL

목록 보기
9/23

💡입양 시각 구하기(2)

◽ 문제 & 문제 설명




◽ 풀이

  • 문제를 보고 MySQL에는 range()같은게 없는 데 어떻게 하지라는 생각을 했다.

  • 0부터 23까지 union all을 노가다를 해야하나 싶었지만

  • 구글링해보고 찾아본 결과 ✨with recursive를 사용하면 됐다.

  • ❗HOUR(DATETIME)하면 DATETIME에 없는 시간은 안나오니까

  • 2번째 줄: with recursive를 이용하여 TMP라는 임시 테이블을 만들었다.

  • 3번째 줄: 초기값 = 0 으로 하고 별칭 "h"로 지정했다.

  • 5번째 줄: 계산식 = +1 으로 하고 제어문 WHERE = h<23

    h = 0~23까지 생성


0시부터 23시까지, 각 시간대별입양이 몇 건이나 발생했는지 조회하는 SQL문

  • 7번째 줄: 0시~23시 ➡️ h , 입양 건수 ➡️ COUNT
  • 9번째 줄: 기준이 되는 테이블 ➡️ TMP == h(0~23)

    • LEFT OUTER JOIN이기 떄문에 TMP에 있는 0시~23시는 전부 가져온다.

    • 조인 조건 ➡️ DATETIME의 시간(HOUR)과 0~23

  • 10번째 줄: 각 시간대별이니깐 그룹핑 기준을 h로한다.

  • 11번째 줄: 결과는 시간대 순으로 정렬




💡 배운점

◽ WITH RECURSIVE

  • 메모리 상에 가상의 테이블을 저장한다.
  • 재귀 쿼리를 이용하여 실제로 테이블을 생성 및 삽입 하지 않아도 가상 테이블을 생성 가능하다.

0개의 댓글