728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/59413
문제 설명
ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다.
NAMETYPENULLABLEANIMAL_ID | VARCHAR(N) | FALSE |
ANIMAL_TYPE | VARCHAR(N) | FALSE |
DATETIME | DATETIME | FALSE |
NAME | VARCHAR(N) | TRUE |
SEX_UPON_OUTCOME | VARCHAR(N) | FALSE |
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
이 문제와 입양 시간 구하기(1)과 차이점은
- 주어지지 않은 시간(hour, 0 ~ 23시 모두)도 명시하여 0으로 표시해줘야함
이다. 입양 시간 구하기(1)은 GROUPBY절로 같은 시간대만 그룹화해준 후 Counting만 해주면 됐는데 해당 문제는 존재하지 않는 시간대도 명시한 후 0으로 표시해주어야 한다.
어떻게 쿼리문을 작성할 수 있을까 고민했어야 한다. 아직 부족하기에 다른 풀이법을 참고하며 풀이를 진행하였다.
- 변수를 선언해주어 명시하고자 하는 시간 별로 진행해준다.
- 1번에서 명시한 시간대를 COUNT해준다.
- SET으로 변수명과 초기값을 설정해준다.
- @가 함께 존재하는 변수는 프로시저가 종료되어도 유지된다.
- 종료되지 않기 때문에 값을 누적하여 0시부터 23시까지 진행한다.
- @HOUR는 초기값 -1로 설정한다. PL/SQL 문법에서 :=은 비교연산자 =과 혼동을 피하기 위한 대입 연산이다.
- SELECT(@HOUR := @HOUR+1)은 @HOUR의 값에 1씩 증가시키면서 SELECT문 전체를 실행한다.
-- 코드를 입력하세요
SET @HOUR := -1;
SELECT (@HOUR := @HOUR + 1) HOUR,
(SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @HOUR) COUNT
FROM ANIMAL_OUTS
WHERE @HOUR < 23;
728x90
반응형
'CS > 데이터베이스' 카테고리의 다른 글
[SQL] 프로그래머스 : 즐겨찾기가 가장 많은 식당 정보 출력하기 (0) | 2023.04.28 |
---|---|
SQL - 날짜 관련 함수 (0) | 2023.02.22 |
SQL - SELECT : 여러 가지 조건 처리 (0) | 2023.02.21 |
SQL - SELECT : LIKE, NULL 대체 (0) | 2023.02.20 |
데이터베이스 : SQL (0) | 2023.01.21 |