문제 설명
조건
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) 해설이었습니다.
'Programmers > Solution' 카테고리의 다른 글
[프로그래머스] 해시 > 전화번호 목록 (0) | 2022.01.12 |
---|---|
[프로그래머스] 해시 > 완주하지 못한 선수 (0) | 2022.01.12 |
[프로그래머스] SELECT > 아픈 동물 찾기 (0) | 2022.01.04 |
[프로그래머스] String, Date > 오래 기간 보호한 동물(2) (0) | 2022.01.04 |
[프로그래머스] JOIN > 보호소에서 중성화한 동물 (0) | 2022.01.04 |
댓글