GROUP BY
- 공통된 row 값으로 그룹을 지을 때 사용
- COUNT, MAX, MIN, SUM, AVG와 같은 집계 함수와 자주 사용
- W3S
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);
프로그래머스
SELECT ANIMAL_TYPE, COUNT(ANIMAL_ID) as 'COUNT'
FROM ANIMAL_INS
WHERE ANIMAL_TYPE = 'Cat' or ANIMAL_TYPE = 'Dog'
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE ASC;
- 고양이와 개를 그룹화해서 각 동물의 수를 카운트
SELECT NAME, COUNT(ANIMAL_ID) as 'count'
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME) > 1
ORDER BY NAME ASC;
- 이름이 두 번 이상 사용된 이름과 회수 조회
- 이름 순으로 정렬
- HAVING: 집계 함수와 함께 WHERE 구문을 사용할 수 없기 때문에 HAVING 구문을 통해서 조건을 설정
SELECT HOUR(DATETIME) as 'HOUR', COUNT(HOUR(DATETIME)) as 'COUNT'
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) between 9 and 20
GROUP BY HOUR
ORDER BY HOUR;
- 시간대 별로 입양 시간대와 입양 회수 조회
- 9시 부터 19시 59분 까지
- HOUR: HOUR 함수를 사용하면 DATETIME에서 시간대만 추출할 수 있음
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;
- 시간대 별로 입양 시간대와 입양 회수 조회
- 0시 부터 23시 59분 까지
- SET: SQL에서 변수 할당 예약어(@변수명)
- 1행: 0부터 23까지 시간대를 조회하겠음(재할당: @hour + 1)
- 2행: 테이블에서 시간대별로 모두 카운트한걸 COUNT라 칭하고 조회하겠음
- 3행: ANIMAL_OUTS 테이블에서 조회하겠음
- 4행: @hour는 23보다 작음