종류
자주 사용되는 그룹 함수(집계 함수) 는 다음과 같습니다.
함수 | 설명 |
AVG() | 평균 값을 반환합니다. |
COUNT() | 행의 개수를 반환합니다. |
MAX() | 최대값을 반환합니다. |
MIN() | 최소값을 반환합니다. |
SUM() | 합계를 반환합니다. |
그 외에도 공식 문서에서 설명하고 있는 많은 그룹 함수들이 있습니다.
함수 | 설명 |
BIT_AND() | 비트 AND 결과를 반환합니다. |
BIT_OR() | 비트 OR 결과를 반환합니다. |
BIT_XOR() | 비트 XOR 결과를 반환합니다. |
GROUP_CONCAT() | 연결된 문자열을 반환합니다. |
JSON_ARRAYAGG() | 결과 세트를 단일 JSON 배열로 변환합니다. 5.7.22 버전부터 사용 가능합니다. |
JSON_OBJECTAGG(key, value) | 결과 세트를 단일 JSON 객체로 변환합니다. 5.7.22 버전부터 사용 가능합니다. |
STD() | 모집단 표준편차를 반환합니다. |
STDDEV() | STD()와 동일한 기능을 수행합니다. Oracle과 호환됩니다. |
STDDEV_POP() | STD()와 동일한 기능을 수행합니다. |
STDDEV_SAMP() | 표본 표준편차를 반환합니다. |
VAR_POP() | 모집단 분산을 반환합니다. |
VAR_SAMP() | 표본 분산을 반환합니다. |
VARIANCE() | VAR_POP()과 동일한 기능을 수행합니다. |
사용법
GROUP BY와 함께 사용
그룹 함수는 GROUP BY와 함께 많이 사용되지만, GROUP BY 없이도 사용이 가능합니다.
# 국가 테이블 전체 행 개수
select count(1)
from country;
# 대륙별 국가 개수
select Continent, count(1)
from country
group by Continent;
GROUP BY와 그룹 함수를 함께 사용하면 GROUP BY 기준으로 데이터를 집계합니다.
GROUP BY 없이 사용한다면 전체 데이터(혹은 WHERE로 필터링된 데이터) 기준으로 데이터를 집계합니다.
여러 함수 사용
여러 그룹 함수를 함께 사용할 수 있습니다.
# 대륙별 인구수 합계와 평균 계산
select Continent, sum(Population) as '대륙별 인구수 합계', avg(Population) as '대륙별 인구수 평균'
from country
group by Continent;
각 함수마다 다른 컬럼을 사용해도 됩니다.
# 다른 것도 사용해보고싶어서 써본 그룹 함수들
select
Continent as '대륙',
std(Population) as '대륙별 인구 표준 편차',
variance(Population) as '대륙별 인구 분산',
group_concat(Name) as '대륙별 국가',
json_arrayagg(Name) as '대륙별 국가 json array',
json_objectagg(Code, Name) as '국가코드:국가명'
from country
group by Continent;
조건 사용
그룹 함수에 조건을 사용하면 조건에 맞는 데이터만 계산합니다.
# 수도가 없는 국가의 개수
select
count(*) as '전체 국가 개수',
count(Capital) as '수도가 있는 국가 개수',
count(if(isnull(Capital), 1, null)) as '수도가 없는 국가 개수'
from country;
NULL 데이터의 개수를 카운트하기 위해 COUNT와 IF 함수를 같이 사용했습니다.
NULL 데이터를 제외하고 카운트할 때는 COUNT 함수만 사용해도 됩니다.
왜냐하면 그룹 함수는 NULL 데이터는 집계하지 않기 때문입니다.
DISTINCT 구문을 사용하면 중복이 제거된 집계 데이터를 구할 수 있습니다.
# country 테이블에 존재하는 대륙의 개수
select count(distinct Continent) as '대륙 수'
from country;
그룹 함수(DISTINCT 컬럼명) 형태로 사용하게 되면 컬럼의 중복이 제거된 데이터를 가지고 계산합니다.
읽으면 좋은 글
[MySQL] GROUP_CONCAT 함수 사용 방법, 예제
Reference
https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html
https://www.mysqltutorial.org/mysql-aggregate-functions/mysql-standard-deviation/