DBMS/MySQL

[MYSQL] ๐Ÿ“š WITH ROLLUP & Grouping ํ•จ์ˆ˜

์ธํŒŒ_ 2021. 11. 8. 14:00

with_rollup

WITH ROLLUP

RollUp์€ ๊ทธ๋ฃน ํ•ญ๋ชฉ ์ดํ•ฉ(์ด๊ณ„)์ด๋‚˜, ๊ฐ ๊ทธ๋ฃน ๋ณ„ ์ค‘๊ฐ„ํ•ฉ๊ณ„(์†Œ๊ณ„)๊ฐ€ ํ•„์š”ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ๋œ๋‹ค.

 

์˜ˆ๋ฅผ๋“ค์–ด ๊ทธ๋ƒฅ โ€‹GROUP BY๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด GROUP BY ๋’ค์— ๋‚˜์˜ค๋Š” ์ปฌ๋Ÿผ๋ณ„๋กœ ํ•ฉ๊ณ„๋ฅผ ๊ตฌํ•ด์ค€๋‹ค.

์ด๋•Œ, ์•„์‰ฌ์šด ์ ์ด ์žˆ๋‹ค๋ฉด ํ•ญ๋ชฉ๋ณ„ ํ•ฉ๊ณ„์— ์ „์ฒด ํ•ฉ๊ณ„๊ฐ€ ๊ฐ™์ด ๋‚˜์˜ค๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด๋Ÿด ๋•Œ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด WITH ROLLUP ์ด๋‹ค.

WITH ROLLUP๋Š” ๊ทธ๋ฃน๋ณ„๋กœ ํ•ฉ๊ณ„๋ฅผ ํ•œ๋ฒˆ์— ๊ตฌํ• ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

์ด๋•Œ ํ•ฉ๊ณ„๊ฐ’๋งŒ ์ถ”๊ฐ€ํ•˜๋Š”๊ฑฐ๋ผ, ๋‚˜๋จธ์ง€ ํ•„๋“œ ์ด๋ฆ„ ์ž๋ฆฌ์—๋Š” ๋‹น์—ฐํžˆ NULL๊ฐ’์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋Š”๋ฐ, ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•ด์„œ ์ด๋ฆ„์„ ๋ช…๋ช…ํ•ด์ค„์ˆ˜ ์žˆ๋‹ค.

โ€‹

์›น ์„œ๋ฒ„๋‹จ์—์„œ ์‚ฌ์šฉํ•  ์ฟผ๋ฆฌ์—๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ• ๋•Œ๋งŒ ์‚ฌ์šฉ๋œ๋‹ค.
์„œ๋ฒ„๋‹จ์—์„œ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, GROUP BY๋กœ ์กฐํšŒํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

ROLLUP ์˜ˆ์ œ

 

์ „์ฒด ์ด๊ณ„

 

[ store_information ํ…Œ์ด๋ธ” ]

region_name store_name sales
West Los Angeles 1500
West San Diego 250
West Los Angeles 300
East Boston 700

 

SELECT store_name, SUM(sales)
FROM store_information
GROUP BY store_name WITH ROLLUP
โ€‹store_name SUM(sales)
Boston 700
Los Angeles 1800
San Diego 250
NULL 2750

โ€‹* ๊ทธ๋ฃน ์ดํ•ฉ : ๋งˆ์ง€๋ง‰ ์—ด์— ํ•ฉ๊ณ„๊ฐ€ 2750์ด ํ‘œ์‹œ๋˜๊ณ  ์žˆ๋‹ค.


๋ถ€๋ถ„ ์†Œ๊ณ„

SELECT region_name, store_name, SUM(sales)
FROM store_information
GROUP BY region_name, store_name WITH โ€‹ROLLUP

์ด๋ฒˆ์—๋Š” select ํ•„๋“œ๋ฅผ ๋‘๊ฐ€์ง€๋กœ ํ–ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ๋‘๋ฒˆ ์งธ ํ•„๋“œ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ์ค‘๊ฐ„ ์†Œ๊ณ„๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.


[ ๊ฐ ๊ทธ๋ฃน๋ณ„ 
์ค‘๊ฐ„์ดํ•ฉ ]

region_name store_name SUM(sales)
East Boston 700
East NULL 700
West Los Angeles 1800
West San Diego 250
West NULL 2050
NULL NULL 2750

2๋ฒˆ์งธ ์—ด์— East์˜ ํ•ฉ๊ณ„๊ฐ€ 700์ด๊ณ , 4๋ฒˆ์งธ ์—ด์— West์˜ ํ•ฉ๊ณ„๊ฐ€ 2050์ด ํ‘œ์‹œ๋˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , 5์—ด์— ์ด ๋ชจ๋“  ํ•ฉ๊ณ„์ธ 2750์ด ํ‘œ์‹œ๋œ๋‹ค.


Grouping ํ•จ์ˆ˜

๋งŒ์ผ null์„ ํ—ˆ์šฉํ•˜๋Š” ํ•„๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ทธ๋Ÿผ ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ NULL ์ด์–ด์„œ NULL ๋กœ ์“ฐ์ธ ๊ฒƒ๊ณผ, ๋ถ€๋ถ„ ์†Œ๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์“ฐ์ธ NULL ์€ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ถ„ํ• ๊นŒ?

์•„๋ž˜์™€ ๊ฐ™์€ ํ…Œ์ด๋ธ”์—์„œ region ์ด ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ NULL ์ธ๊ฑด์ง€ ๋ถ€๋ถ„ ์†Œ๊ณ„ NULL ์ธ๊ฑด์ง€ ๊ตฌ๋ถ„ํ•˜๊ธฐ๋Š” ์‚ฌ์‹ค ์–ด๋ ต๋‹ค.

Grouping ํ•จ์ˆ˜

 

์ตœ๊ทผ Mysql 8๋ฒ„์ ผ์—์„œ๋Š” ์ด ๋‘˜์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ง€์›ํ•ด ์ฃผ์—ˆ๋‹ค.

๋ฐ”๋กœ GROUPING ์ด๋ผ๋Š” ํ•จ์ˆ˜๋‹ค.

GROUPING ํ•จ์ˆ˜๋Š” ๊ทธ ์ธ์ž๋ฅผ ๊ทธ๋ฃจํ•‘ ๊ธฐ์ค€์—์„œ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ๋ถ€๋ถ„ ์ด๊ณ„์ธ ๊ฒฝ์šฐ์— 1์„ ๋ฆฌํ„ดํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ 0์„ ๋ฆฌํ„ดํ•œ๋‹ค. 

> select * from table;
+------+------+------+
| a    | b    | c    |
+------+------+------+
|  111 |   11 |   11 |
|  222 |   22 |   22 |
|  111 |   12 |   12 |
|  222 |   23 |   23 |
| 1111 | NULL |  112 |
| NULL |  112 | NULL |
+------+------+------+


> SELECT a, b, SUM(c) as SUM, GROUPING(a), GROUPING(b) 
FROM table 
GROUP BY a,b WITH ROLLUP;

+------+------+------+-------------+-------------+
| a    | b    | SUM  | GROUPING(a) | GROUPING(b) |
+------+------+------+-------------+-------------+
| NULL |  112 | NULL |           0 |           0 |
| NULL | NULL | NULL |           0 |           1 | 					-- ํ•„๋“œb ์†Œ๊ณ„1
|  111 |   11 |   11 |           0 |           0 |
|  111 |   12 |   12 |           0 |           0 |
|  111 | NULL |   23 |           0 |           1 | 					-- ํ•„๋“œb ์†Œ๊ณ„2
|  222 |   22 |   22 |           0 |           0 |
|  222 |   23 |   23 |           0 |           0 |
|  222 | NULL |   45 |           0 |           1 | 					-- ํ•„๋“œb ์†Œ๊ณ„3
| 1111 | NULL |  112 |           0 |           0 |
| 1111 | NULL |  112 |           0 |           1 | 					-- ํ•„๋“œb ์†Œ๊ณ„4
| NULL | NULL |  180 |           1 |           1 | -- ํ•„๋“œa ์ด๊ณ„
+------+------+------+-------------+-------------+
GROUPING(a)๋Š” a์ปฌ๋Ÿผ์˜ ์ „์ฒด sum ๊ฒฐ๊ณผ๋ฅผ 1๋กœ ํ‘œ์‹œํ•ด์ฃผ๋ฉฐ, GROUPING(b)๋Š” ๊ฐ a์ปฌ๋Ÿผ ๊ทธ๋ฃนํ™”ํ•œ c๋ฅผ ํ•ฉํ•œ ๊ฐ’์„ SUM์ปฌ๋Ÿผ์— ์ถœ๋ ฅํ•ด์ฃผ๊ณ  1๋กœ ํ‘œ์‹œํ•ด์ค€๋‹ค.