데이터로그😎
[집계 함수] GROUP BY, GROUPING 본문
GROUP BY ~ WITH ROLLUP
group by 시 옆에 with rollup을 붙이게 되면 group by를 한 섹션 별로 소계가 생기게 된다.
만약 group by에 한 컬럼만 썼다면? 총계가 나옵니다.
SELECT CountryCode, Sum(population)
FROM world.city
GROUP BY CountryCode WITH ROLLUP;
그러나, 여기서 궁금한 점!
만약 값 자체가 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 |