언어 공부/SQL

[SQL] 프로그래머스 SQL > GROUP BY

수기 2022. 4. 3. 21:40

https://programmers.co.kr/learn/courses/30/parts/17044

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

GROUP BY > 고양이와 개는 몇 마리 있을까

 
SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE)
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE

 

GROUP BY > 동명 동물 수 찾기

SELECT NAME, COUNT(NAME) AS COUNT FROM ANIMAL_INS 
GROUP BY NAME
HAVING COUNT(NAME) >= 2
ORDER BY NAME

 

GROUP BY > 입양 시각 구하기(1)

SELECT HOUR(DATETIME) AS HOUR, COUNT(HOUR(DATETIME)) AS COUNT FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) BETWEEN 9 AND 19
GROUP BY HOUR(DATETIME)
ORDER BY HOUR

 

 

GROUP BY > 입양 시각 구하기(2)

SET @HOUR := -1;

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

구글 검색을 통해서 풀었다.

입양 시각 구하기(2)의 경우, (1)과 같이 출력할 경우 9시부터 19시까지밖에 결과가 나오지 않기 때문에,

SET함수로 변수 HOUR를 선언 해 준 뒤에 SELECT를 해줘서 구해야한다.

@HOUR := -1 와 @HOUR := @HOUR + 1 에서

:= 은 대입,

HOUR(DATETIME) = @HOUR 에서 = 은 등호 를 의미한다.

 

SET @HOUR := -1; #HOUR 변수 선언
SELECT (@HOUR := @HOUR +1) # HOUR - #HOUR 0부터 ... 반복
(SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @HOUR) AS COUNT
# 테이블 ANIMAL_OUTS에서 HOUR(DATETIME)과 @HOUR이 같을 때의 수를 COUNT 후 칼럼명은 COUNT로 지정 FROM ANIMAL_OUTS
WHERE @HOUR < 23 #HOUR - 0부터 23까지 반복 (3번째 줄과 연관)