Область применения 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
Другие вопросы по тегам