728x90
입양 시각 구하기(2)
문제
ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다. 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다. |
예시
갑자기 난이도가 급상승 했습니다.
로컬 변수를 활용해 푸는 방법으로 하겠습니다.
문제에서 원하는 것은
- 0~23시 까지의 시간대를 표시
- 시간대별로 COUNT를 사용
- 시간대순으로 정렬
이렇게 3가지 입니다.
바로 작성해 보겠습니다.
우선 시간정렬 부터 시키겠습니다.
SET @HOUR = -1;
SELECT
(@HOUR := @HOUR +1) AS HOUR
FROM
ANIMAL_OUTS
WHERE
@HOUR < 23;
SET 을 사용해 @HOUR변수에 초기값 -1을 지정해 주었습니다.
'@'가 붙은 변수는 프로시저가 종료해도 값은 유지 됩니다.
그 후에 SELECT에서 @HOUR에 대입연산자 :=를 사용해 줍니다.
@HOUR값에 @HOUR +1을 대입했습니다.
이렇게 +1씩 증가 시키면서 SELECT문 전체를 실행합니다.
WHERE문의 조건이 충족할때까지 즉 @HOUR < 23 일때까지 반복합니다.
0부터 23까지 증가하기 때문에 따로 시간대별 정렬은 안하셔도 정렬이됩니다.
여기에 서브쿼리로 원하는 값을 추가하기만 하면 됩니다.
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;
서브쿼리에서는 COUNT로 갯수를 세고
WHERE로 HOUR와 @HOUR가 같은것을 조회했습니다.
이렇게 작성하면 완성입니다.
출처:[프로그래머스 코딩테스트 연습] - https://programmers.co.kr/learn/courses/30/lessons/59413
728x90
'Database' 카테고리의 다른 글
[프로그래머스 SQL - IS NULL] 이름이 있는 동물의 아이디 (0) | 2021.07.12 |
---|---|
[프로그래머스 SQL - IS NULL] 이름이 없는 동물의 아이디 (0) | 2021.07.12 |
[프로그래머스 SQL - GROUP BY] 입양 시각 구하기(1) (0) | 2021.07.07 |
[프로그래머스 SQL - GROUP BY] 동명 동물 수 찾기 (0) | 2021.07.06 |
[프로그래머스 SQL - GROUP BY] 고양이와 개는 몇 마리 있을까 (0) | 2021.07.01 |