데이터로그😎

[집계 함수] GROUP BY, GROUPING 본문

SQL/MySQL

[집계 함수] GROUP BY, GROUPING

지연v'_'v 2023. 9. 8. 13:31

GROUP BY ~ WITH ROLLUP

group by 시 옆에 with rollup을 붙이게 되면 group by를 한 섹션 별로 소계가 생기게 된다.

만약 group by에 한 컬럼만 썼다면? 총계가 나옵니다.

SELECT CountryCode, Sum(population)
FROM world.city
GROUP BY CountryCode WITH ROLLUP;

original table                                                                                                                                                    groupby table

                               

 

그러나, 여기서 궁금한 점!

만약 값 자체가 NULL인 것들과 GROUP BY ~ WITH ROLLUP으로 인해 총계 옆에 NULL이라고 나오는 것들을 어떻게 구분하지??

 

이를 위해 GROUPING 함수가 나왔다고 한다.       

 

GROUPING

  • GROUPING 함수는 그 인자를 그루핑 기준에서 고려하지 않은 부분 , 즉 총계나 소계인 경우에는 1을, 그 외는 0을 리턴한다.
  • 아래 표를 살펴보면 Continent를 기준으로 roll up된 row는 GROUPING(Continent)열에 1값이 들어있고, Name을 기준으로 roll up된 row는 GROUPING(Name)컬럼에 1이 기재되어 있다.
  • 이 표는 GROUPING(Name)을 기준으로 내림차순 된 표이니 헷갈릴 수 있다. 다음을 살펴보
SELECT Continent, Name, sum(SurfaceArea), GROUPING(Continent), GROUPING(Name)
FROM world.country
GROUP BY Continent, Name WITH ROLLUP;

 

  • Continent가 Asia일 때만 보면 GROUPING(Name) 컬럼의 차이점이 잘 보인다. 
  • GROUPING(Name) = 1이란 뜻은 해당 열을 집계했을 때 Name을 모두 sum()했다는 뜻이다.

'SQL > MySQL' 카테고리의 다른 글

[윈도우 함수] Lead, Lag 함수  (1) 2023.11.26
[윈도우 함수] RANK() OVER()  (0) 2023.11.24
REPLACE, SUBSTR, LPAD, TRIM  (0) 2023.09.08
Null과 공백의 차이 & Null값의 처리  (0) 2023.09.08
[윈도우 함수] SUM() OVER()  (0) 2023.09.06