데이터 조회할 때 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 그룹 함수 종류 및 사용법
종류 자주 사용되는 그룹 함수(집계 함수) 는 다음과 같습니다. 함수 설명 AVG() 평균 값을 반환합니다. COUNT() 행의 개수를 반환합니다. MAX() 최대값을 반환합니다. MIN() 최소값을 반환합니다. SUM()
priming.tistory.com
[MySQL] GROUP BY HAVING 사용법 및 예제
[MySQL] GROUP BY HAVING 사용법 및 예제
HAVING 절은 GROUP BY에 의해 생성된 그룹 데이터를 대상으로 조건을 적용할 수 있습니다. 사용법 기본 구조는 다음과 같습니다. SELECT [컬럼명] FROM [테이블명] WHERE [조건] GROUP BY [컬럼명] HAVING [조건]
priming.tistory.com
[MySQL] GROUP BY 와 ONLY_FULL_GROUP_BY
[MySQL] GROUP BY 와 ONLY_FULL_GROUP_BY
SELECT 구문에서 GROUP BY 절을 사용할 때 오류가 나는 경우가 있습니다. 전체 오류 메시지는 다음과 같습니다. Error Code: 1055. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'world.
priming.tistory.com