Если у меня есть таблица со следующей структурой:
StoreID StoreName Region Dept Sales month
1 xyz East Phones 1000 201902
2 pch west movies 3000 201902
3 cts west tech 500 201902
4 xyz east cars 8000 201902
Вместо того, чтобы писать отдельные объединения всех запросов для агрегирования данных на каждом уровне, мы можем легко сделать это в группировках. Особенно, если количество столбцов в таблице велико и нам нужно написать несколько групповых байтов.
с объединением всех - я бы сделал:
select month,'Store' as Level,'N/A' as store 'N/A' as Region,'N/A' as dept, sum(sales)
from stores
group by month
union all
select month,'Region' as Level,'N/A' as store,region as Region,'N/A' as dept, sum(sales)
from stores
group by month,region
union all
select month,'StoreRegion' as Level,store as store,region as Region,'N/A' as dept, sum(sales)
from stores
group by month,store,region
и т.д.
То же самое можно записать в группировках, например:
select month,store,region,dept,sum(sales)
from stores
group by grouping sets (
(month,store,region,dept)
,(month,store)
,(month,store,region)
)
У меня есть 2 вопроса об использовании групповых наборов:
- Как исключить определенный набор, если я не хочу, чтобы он группировался по нему.
- Как добавить имя уровня, Магазин, Регион, StoreRegion и т. Д.?
Я пытался использовать grouping_id, но это не доказательство. Так интересно, есть ли другой способ.