[programmers - sql] GROUP BY

배채윤·2020년 11월 28일
0

GROUP BY

sql에서 유형별로 개수를 가져오고 싶을 떄는 column에 데이터를 그룹화 할 수 있는 GROUP BY를 사용하면 된다.

  • GROUP BY: 특정 column을 그룹화 할 때
  • HAVING : 특정 컬럼을 그룹화한 결과에 조건을 걸 때(WHERE은 그룹화 전, HAVING은 그룹화 후)

사용법

  • Column 그룹화
SELECT col FROM table GROUP BY groupcol
  • Column 그룹화 후 조건 처리
SELECT col FROM tabel GROUP BY groupcol HAVING col >= 2

문제

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

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

동명 동물 수 찾기

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

입양 시간 구하기(1)

HOUR() 함수를 이용해서 DATETIME 중 시간만 추출할 수 있다.

SELECT HOUR(DATETIME) h, COUNT(DATETIME)
FROM ANIMAL_OUTS
GROUP BY h(DATETIME)
HAVING h >= 9 AND h <= 19
ORDER BY h

조건문으로 WHERE을 이용할 수도 있다.

SELECT HOUR(DATETIME), COUNT(DATETIME)
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) <= 19
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATETIME)

입양 시간 구하기(2)

갑자기 level4로 난이도가 올라갔다.
@가 앞에 붙은 변수는 프로시저가 끝나도 계속 유지된다.

SET @hour := -1; -- 변수 선언
SELECT (@hour := @hour + 1) as HOUR,
(SELECT COUNT(DATETIME) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @hour) 
FROM ANIMAL_OUTS
WHERE @hour < 23

Reference

profile
새로운 기술을 테스트하고 적용해보는 걸 좋아하는 서버 개발자

0개의 댓글