이 포스팅은 Sql Problem 시리즈 8 편 중 6 번째 글 입니다.

  • Part 1 - 01: 보호소에서 중성화한 동물
  • Part 2 - 02: 없어진 기록 찾기
  • Part 3 - 03: 오랜 기간 보호한 동물 2
  • Part 4 - 04: 오랜 기간 보호한 동물
  • Part 5 - 06: 우유와 요거트가 담긴 장바구니
  • Part 6 - This Post
  • Part 7 - 08: 중성화 여부 판단하기
  • Part 8 - 09: DATETIME에서 DATE로 형 변환
▼ 목록 보기

목차

▼ 내리기

level4 : 변수를 사용하는 문제이다.

생각

이 문제는 group by를 사용할 수 없다는 것이 핵심이다. group by 는 있는 값을 DISTINCT하게 판단하여 집합을 구성해주는 쿼리이다. 그런데 이 문제는 0~23의 범위에서의 count를 구하기 때문에 사용할 수가 없다.

해결

이 문제를 해결하기 위해서는 임의로 0에서 23까지의 범위를 만들고, 그 숫자에 따르는 개수를 파악하여 넣는 것이 효율적으로 보인다. 이런 방법을 sub Query라 부른다. 변수 선언 방법은 SET으로 한다.

Code

SET @hour = -1;
SELECT @hour := @hour + 1 AS "HOUR", (
        SELECT COUNT(ANIMAL_ID) FROM ANIMAL_OUTS
        WHERE @hour = HOUR(DATETIME)
    ) AS "COUNT"
    FROM ANIMAL_OUTS
    WHERE @hour < 23

Reference

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