Использование группирования наборов - определение имен уровней и устранение определенных наборов - PullRequest
0 голосов
/ 28 марта 2019

Если у меня есть таблица со следующей структурой:

  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 вопроса об использовании групповых наборов:

  1. Как исключить определенный набор, если я не хочу, чтобы он группировался по нему.
  2. Как добавить имя уровня, Магазин, Регион, StoreRegion и т. Д.?

Я пытался использовать grouping_id, но это не доказательство. Так интересно, есть ли другой способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...