본문 바로가기
Programmers/Solution

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

by Ratataca 2022. 1. 4.

문제 설명

조건

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

 

문제

보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

 

예시

 

정답

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

 


풀이

 SET 키워드로 사용자 정의 변수인 SET 변수를 만들어 특정 값을 할당하여 사용하는 것이다. 아래와 같은 쿼리 내에서 우리는 그림과 같은 출력을 얻을 수 있다. SET을 변수 선언을 위한 타입 정의라고 생각하고 SET 변수의 조건을 WHERE에 담는 것이다. SELECT문에는 해당 변수를 어떤 식으로 증감할지 나타내는 것이다. 또한 :=는 대입 연산자 =과 동일하다고 생각하면 된다. 여기서 주의할 점은 SET 키워드를 통해 변수를 선언하였기 때문에 ;(세미콜론)을 반드시 사용해야 한다.

SET @HOUR := -1;
SELECT(@HOUR := @HOUR + 1) AS HOUR
FROM ANIMAL_OUTS 
WHERE @HOUR < 3

 

해당 코드에 각 @HOUR에 맞는 HOUR(DATETIME)값을 전체 칼럼에서 COUNT(*)을 하면 된다. 

따라서 정답 코드는 다음과 같다.

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

 

이상 프로그래머스의 입양 시각 구하기(2) 해설이었습니다.

댓글