ToBe끝판왕

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

■ 프로그래밍 SKILLS/SQL

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

업그레이드중 2022. 6. 11. 23:00
반응형

 


 

입양 시각 구하기(2)

 

Programmers의 SQL 고득점 Kit

GROUP BY 문제

 

 

 해당 문제 링

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

 

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

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( 시간 );

 

 

▶  정답

•  입양 시각 구하기(1) 문제와 다른 점은 모든 시간대 ( 0시 ~ 23시 )를 조회해야 한다.

•  단순하게 GROUP BY만 사용하여 조회한다면,  7시 ~ 19시 를 제외하고는 나오지 않는다.

    왜냐하면 예시에 나머지 시간은 개수가 0이기 때문이다.

•  문제는 0시 ~ 23시를 조회하는 것이므로 데이터베이스에 없는 시간까지 해서 0시 ~ 23시를 만들어야 한다.

    따라서, 테이블을 먼저 만들어야 한다.

SET @HOUR = -1;
SELECT ( @HOUR := @HOUR +1 ) AS HOUR
FROM ANIMAL_OUTS
WHERE @HOUR < 23;


=> @HOUR 변수에 -1을 할당하고 22까지 1을 더하고 HOUR이름으로 보여지게 한다.
=> 위 SQL문을 입력하고 프로그래머스에서 코드실행을 하면 0 ~ 23이 뜨는것을 알수 있다.
=> HOUR 테이블이 완성되었다.

 

•  HOUR은 구했기 때문에 각 시간대별 입양 횟수 COUNT를 마저 구해야 한다.

SET @HOUR = -1;
SELECT ( @HOUR := @HOUR +1 ) AS HOUR,
	( SELECT COUNT( HOUR( DATETIME ) )
    	WHERE HOUR( DATETIME ) = @HOUR ) AS COUNT
	FROM ANIMAL_OUTS
WHERE @HOUR < 23;


=> 최종 정답 SQL 문

=> ANIMAL_OUTS 테이블에서 입양일의 시간이 HOUR변수와 같을때
   개수를 세고 열을 COUNT로 보여지게 하여 결과물을 만들어낸다.

 

 

※ SET 명령어

쿼리문에서 변수를 사용하기 위해서 SET 명령을 사용하고 변수 앞에는 @이 붙는다.

변수에 값을 할당하기 위해서는 = 또는 := 기호를 사용한다.

// 변수 선언, 값 대입
SET @변수명 = 변수값;

// 변수 출력
SELECT @변수이름;

 

 

 

반응형
Comments