DB/mysql

[sql]grouping 함수 사용법

  • -
반응형

grouping

이번 포스트에서는 sql의 grouping 함수에 대해서 살펴본다.

dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_grouping

 

MySQL :: MySQL 8.0 Reference Manual :: 12.24 Miscellaneous Functions

MySQL 8.0 Reference Manual  /  Functions and Operators  /  Miscellaneous Functions 12.24 Miscellaneous Functions Table 12.29 Miscellaneous Functions Name Description ANY_VALUE() Suppress ONLY_FULL_GROUP_BY value rejection BIN_TO_UUID() Convert binar

dev.mysql.com

 

용도

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;

즉 indepyear에 대한 rollup의 경우는 소계라고 출력한다.

더 자세한 사용법은 언제나 처럼 공식 메뉴얼을 참조하자.

dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_grouping

 

MySQL :: MySQL 8.0 Reference Manual :: 12.24 Miscellaneous Functions

MySQL 8.0 Reference Manual  /  Functions and Operators  /  Miscellaneous Functions 12.24 Miscellaneous Functions Table 12.29 Miscellaneous Functions Name Description ANY_VALUE() Suppress ONLY_FULL_GROUP_BY value rejection BIN_TO_UUID() Convert binar

dev.mysql.com

 

반응형

'DB > mysql' 카테고리의 다른 글

[sql] Null의 연산  (0) 2023.01.31
[mysql 설정] ONLY_FULL_GROUP_BY  (0) 2022.09.13
mysql workbench 단축키  (0) 2020.10.14
[mysql] 컬럼 alias와 정렬  (0) 2020.08.22
MySQL root 계정 비밀번호 초기화  (8) 2020.08.21
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.