데이터 조회할 때 GROUP BY 절을 사용하면 특정한 열이나 데이터를 기준으로 결과값을 그룹화할 수 있습니다.
그렇게 그룹화된 데이터를 기준으로 각종 통계값을 구할 수 있습니다.
기본 그룹 조회
특정 컬럼을 기준으로 묶어서 조회할 수 있습니다.
컬럼은 여러개 사용할 수 있습니다.
SELECT <컬럼명>, <그룹함수>
FROM <테이블명>
GROUP BY <컬럼명>
예제 데이터는 MySQL 샘플 데이터베이스인 world DB의 데이터를 사용하였습니다.
MySQL 8버전을 사용했고, MySQL Workbench에서 실행하였습니다.
예시의 쿼리는 도시 테이블에서 국가 코드를 기준으로 그룹화하여 국가에 속한 도시가 몇 개인지 구하는 쿼리입니다.
count 뿐만 아니라 합계, 평균 등 여러 통계치를 구할 수 있습니다.
# 나라별 도시의 개수
select CountryCode, count(1)
from city
group by CountryCode;
# 국가별 인구의 총 합
select Code, Name, sum(Population)
from country
group by Code;
# 국가별 도시 인구 수의 평균
select CountryCode, avg(Population)
from city
group by CountryCode;
그 외에도 최대값(max), 최소값(min) 등 여러가지 집계 함수를 사용할 수 있습니다.
다양한 그룹 조회 방법
함수 사용
테이블에 있는 컬럼이 아니라도 임의의 계산 값이나 특정한 기준에 따라 그룹화할 수 있습니다.
# 인구가 100만이 넘는/넘지않는 도시의 개수
select if(Population >= 1000000, 'yes', 'no') as '인구수가 100만을 넘나요?', count(1)
from city
group by if(Population >= 1000000, 'yes', 'no');
GROUP BY 절에 IF 함수를 사용하여 도시의 인구가 100만이 넘는지 여부를 기준으로 그룹화하였습니다.
그룹화 할 수 있는 기준이 된다면 어떤 것도 사용이 가능합니다.
컬럼 여러개 사용
GROUP BY 절에 여러개의 컬럼을 사용할 수 있습니다.
# 국가의 구역에 도시가 몇 개 있는지 카운트
select CountryCode, District, count(1)
from city
group by CountryCode, District
GROUP BY 절은 이처럼 다양하게 활용이 가능합니다.
읽으면 좋은 글
[MySQL] GROUP BY 그룹 함수 종류 및 사용법
[MySQL] GROUP BY HAVING 사용법 및 예제
[MySQL] GROUP BY 와 ONLY_FULL_GROUP_BY