[프로그래머스] 입양 시간 구하기(1) - SQL / Lv.2

ByungJik_Oh·2025년 10월 3일
0

[Programmers - SQL]

목록 보기
36/39
post-thumbnail

💡 문제

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다.

NAMETYPENULLABLE
ANIMAL_IDVARCHAR(N)FALSE
ANIMAL_TYPEVARCHAR(N)FALSE
DATETIMEDATETIMEFALSE
NAMEVARCHAR(N)TRUE
SEX_UPON_OUTCOMEVARCHAR(N)FALSE

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


💭 접근

이 문제는 간단하게 HOUR() 함수를 사용하여 GROUP BY를 한 뒤, 09시부터 19시 사이에 있는 입양 건수를 구하면 되는 문제이다.

이때 한가지 살펴볼 점으론, WHERE 절과 HAVING 절의 차이를 볼 수 있다는 점이다.

WHERE 절로 조건을 적용할 시, WHERE절은 GROUP BY 절보다 먼저 실행되어 Row by Row로 각각의 행들을 살펴보는 보기때문에 ALIAS를 사용할 수 없다.

그러나 HAVING 절의 경우 GROUP BY 이후에 실행되기 때문에 먼저 시간대 별로 그룹이 만들어 진 후 조건에 따라 레코드를 필터링 한다. 따라서 ALIAS를 사용할 수 있다.


📒 코드

# WHERE 절
SELECT  HOUR(DATETIME) AS HOUR
        ,COUNT(*) AS COUNT
  FROM  ANIMAL_OUTS
 WHERE  HOUR(DATETIME) BETWEEN 9 AND 19
 GROUP
    BY  HOUR
 ORDER
    BY  HOUR ASC;
    
# HAVING 절
SELECT  HOUR(DATETIME) AS HOUR
        ,COUNT(*) AS COUNT
  FROM  ANIMAL_OUTS
 GROUP
    BY  HOUR
HAVING  HOUR BETWEEN 9 AND 19
 ORDER
    BY  HOUR ASC;

💭 후기

SQL의 코드 실행 순서를 간단하게 볼 수 있는 문제였다.


🔗 문제 출처

https://school.programmers.co.kr/learn/courses/30/lessons/59412


profile
精進 "정성을 기울여 노력하고 매진한다"

0개의 댓글