Использование ratio_to_report с 3 или более группировками Oracle SQL - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь настроить запрос для агрегирования общего объема продаж в% по номеру магазина, сегменту клиента и группам брендов.В идеале я хочу получить следующие результаты:

 Store --------Segment-------Brand------Sales--------pct_total
    1              A            X         50            66.6
    1              A            Y         25            33.3
    1              B            X         25            25.0
    1              B            Y         25            25.0
    1              B            Z         50            50.0

Это код, который у меня так далеко от таблицы, содержащей данные, необходимые для этого.

 select Store,Segment,Brand, to_char(100 * ratio_to_report(total_sales) over (partition by store, segment, brand),'990.00L','NLS_CURRENCY=%') as pct_total
 from ( 
         select 
           Store,
           Segment,
           Brand,
           sum(sales) as total_sales
           from customer_data 
           group by grouping sets ((Store),(store,Segment,brand)))

Просто выдает ошибку из-за группировки

1 Ответ

0 голосов
/ 12 сентября 2018

Группировка наборов не требуется, это вернет ожидаемый результат:

select Store,Segment,Brand, total_sales,
   to_char(100 * ratio_to_report(total_sales) over (partition by store, segment),'990.00L','NLS_CURRENCY=%') as pct_total
from ( 
        select 
          Store,
          Segment,
          Brand,
          sum(sales) as total_sales
          from customer_data 
          group by store,Segment,brand)
...