ToBe끝판왕

[ 프로그래머스 / SQL ] GROUP BY - 입양 시각 구하기(1) 본문

■ 프로그래밍 SKILLS/SQL

[ 프로그래머스 / SQL ] GROUP BY - 입양 시각 구하기(1)

업그레이드중 2022. 6. 11. 21:18
반응형

 


 

입양 시각 구하기(1)

 

Programmers의 SQL 고득점 Kit

GROUP BY 문제

 

 

 해당 문제 링

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

 

코딩테스트 연습 - 입양 시각 구하기(1)

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물

programmers.co.kr

 


 

정답 및 풀이

 

▶  GROUP BY 절

•  데이터들을 원하는 그룹으로 나눌 수 있다.

•  나누고자 하는 그룹의 칼럼명을 SELECT절과 GROPU BY절 뒤에 추가하면 된다.

•  FROM절과 WHERE절 뒤에 온다.

•  집계함수와 함께 사용되는 상수는 GROUP BY절에 추가하지 않아도 된다.

 

•  GROUP BY 절

SELECT 컬럼명, 그룹함수
FROM 테이블명
GROUP BY 그룹대상;

 

 

▶  HAVING 절

•  GROUP BY 절을 통해 그룹을 짓고, 각 그룹에 조건을 부여할 때 사용한다.

•  GROUP BY 절 다음에 위치한다.

 

•  HAVING 절

SELECT 컬렴명, 그룹함수
FROM 테이블명
GROUP BY 그룹대상
HAVING 그룹함수 포함 조건;

 

 

※ WHERE 절과 HAVING 절 차이

•  WHERE 절은 모든 개별 행에 조건을 줄 수 있다 하지만 HAVING 절은 GROUP BY 된 이후 특정한 그룹의

   행에만 조건을 줄 수 있다.

•  집계함수는 HAVING절과 함께 사용할 수 있지만 WHERE 절은 HAVE절에 포함된 하위 쿼리에 있지 않으면

    집계함수랑 함께 사용할 수 없다.

•  HAVING절은 GROUP BY 절 뒤에 사용하고 WHERE 절은 앞에 사용한다

 

 

※ 집계함수

 

 

▶  HOUR 함수

해당 시간을 알려주는 시간 관련 함수이다.

SELECT HOUR( 시간 );

 

 

▶  정답

•  우리는 각 시간대별 입양이 얼마나 활발한지 알아봐야 하기 때문에, DATETIME을 시간으로 바꾸기 위해서

    HOUR 함수를 사용한다.

•  09:00 ~ 19:59까지 출력하기 위해, WHERE 조건절을 사용한다. ( WHERE절에는 AS HOUR 가 사용 안됨 )

•  시간대별 입양 횟수 이기 때문에, 각 시간을 그룹화한다.

•  시간 대순으로 정렬하기 때문에 ORDER BY를 사용한다.

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;

 

 

 

반응형
Comments