avatar
дата инженеретта
@data_engineerette
16.08.2025 17:05
ROLLUP vs CUBE vs GROUPING SETS

Суть этих штук - добавить промежуточные тоталы (как в экселе). Как будто мы group by делаем несколько раз с разными полями

ROLLUP

GROUP BY ROLLUP (country, region, city)


country-region-city - 6 строк
country-region - 4 строки
country - 2 строки
all - 1 строка
————
13 строк

Мы с каждым уровнем отбрасываем более детальный столбец и считаем тотал шире

Первые 6 строк - как в обычной группировке (поэтому не расписываю). К ним еще добавляем тоталы по стране с регионом, стране и глобальный тотал:

Russia Moscow Oblast NULL 12800
Russia Siberia NULL 1600
USA California NULL 4900
USA Texas NULL 2300
Russia NULL NULL 14400
USA NULL NULL 7200
NULL NULL NULL 21600


CUBE

GROUP BY CUBE (country, region, city)


Здесь нужны все комбинации: по 3 элемента, 2, 1, 0

country-region-city - 6 строк
country-region - 4 строк
country-city - 6 строк
region-city - 6 строк
country - 2 строки
region - 4 строки
city - 6 строк
all - 1 строка
————
35 строк

GROUPING SETS

GROUP BY GROUPING SETS ((country, region, city), (country, region), (country), ())


Здесь можно кастомно задавать группы. В этом примере будет то же самое, что и ROLLUP
19
👍 9
🔥 6
5 27 2.6K

Обсуждение 5

Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.

Обсудить в Telegram