입양 시각 구하기(1)
문제 설명
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 |
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
풀이
SELECT HOUR(DATETIME) AS HOUR, COUNT(DATETIME) AS COUNT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) <= 19
GROUP BY HOUR
ORDER BY HOUR
1. DATETIME 필드에서 필요한 내용은 시간에 대한 정보만이므로 HOUR 함수를 이용하여 시간 부분만 사용하도록 합니다.
2. 이렇게 시간만 얻어낸 값은 HOUR라는 필드로 출력할 수 있게 준비합니다.
3. 이때 이렇게 가공한 DATETIME필드의 시간을 COUNT함수를 이용하여 시간마다 몇개의 데이터가 있는지 확인합니다.
4. WHERE문을 조건문 처럼 사용하여 위에서 만들어놓은 HOUR(DATETME)이 9보다 크거나 같고 19보다 작거나 같은 값을 얻습니다.
5. 이렇게 얻어놓은 데이터 묶음을 GROUP BY 문을 이용하여 그룹핑합니다. 이 내용이 없다면 한 가지 시간에 전체 경우의 수 총합이 나오게 되므로 꼭 해야 합니다.
6. 이렇게 그룹핑된 값을 정렬해주게 되면 원하는 결괏값을 얻을 수 있습니다.
'DevLog' 카테고리의 다른 글
[프로그래머스] SQL 중성화 여부 파악하기 (0) | 2022.10.01 |
---|---|
[프로그래머스] SQL NULL 처리하기 (0) | 2022.10.01 |
[프로그래머스] SQL DATETIME에서 DATE로 형 변환 (1) | 2022.09.30 |
[프로그래머스] SQL 최댓값 구하기 (0) | 2022.09.30 |
[생각] Session, JWT token 항상 jwt가 옳을까? (1) | 2022.09.20 |