Область применения SQL
Я учусь использовать оконные функции и наткнулся на этот оператор SQL.
select
...
sum(ss_ext_sales_price) * 100 / sum(sum(ss_ext_sales_price)) over (partition by i_class) as revenueratio
from
...
where
...
group by
i_item_id,
i_item_desc,
i_category,
i_class,
i_current_price
Мой вопрос, является ли i_class
раздел относится ко всем 3 из них SUM
функции или ли некоторые из них рассчитываются с использованием group by
группировка.
1 ответ
Решение
Оконные функции и функции агрегирования.,, они выглядят очень неловко, когда вы впервые начинаете использовать их вместе. Предложение о разделении не имеет ничего общего с первым sum()
Итак, давайте просто посмотрим на знаменатель:
sum( sum(ss_ext_sales_price) ) over (partition by i_class) as revenueratio
over
относится к первому sum()
, Это займет вычислить сумму суммы столбца.,, то есть общая сумма. Я думаю, что это помогло мне разобраться в этом:
sum(ss_ext_sales_price)
sum( sum(ss_ext_sales_price) ) over (partition by i_class) as revenueratio
Фактически, вам не разрешено иметь оконную функцию в качестве аргумента функции агрегирования:
sum( sum(ss_ext_sales_price) over (partition by i_class) ) as revenueratio