grouping 함수의 목적은 상위 집계 함수의 rollup 행을 일반 행과 구별하기 위해 사용된다.
필요성과 사용 예시
아래 예는 mysql의 sample schema인 world를 이용한다.
먼저 Eastern Asia에 속한 나라들의 독립 연도(indepYear)별 인구(population)의 합을 구해보자.
select indepyear, sum(population)
from country
where region='Eastern Asia'
group by IndepYear;
왜 음수가 있는지는 잘 모르겠지만 기본 결과는 아래와 같다.
여기에 총 인구까지 출력해보려면 간단히 rollup 옵션을 적용할 수 있다.
select indepyear, sum(population)
from country
where region='Eastern Asia'
group by IndepYear with rollup;
그럼 하단에 소계로 전체의 합을 출력해준다.
값이 null인 자료는 보기 않좋기 때문에 값이 null인 경우는 그냥 '-'로 바꿔주자.
select ifnull(indepyear, '-') 독립년도, sum(population)
from country
where region='Eastern Asia'
group by IndepYear with rollup;
잘 처리된것 처럼 보이는데 문제는 마지막 소계 항목 역시 '-'로 대체되어버린 것을 확인할 수 있다. 이때 grouping이 필요하다. 우리는 일반 컬럼의 null과 rollup의 결과 null을 구별해줄 필요가 있다.
select if(grouping(indepyear), '소계', ifnull(indepyear, '-')) 독립년도, sum(population)
from country
where region='Eastern Asia'
group by IndepYear with rollup;