我正在学习如何使用窗口函数并遇到了这个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
分组计算了其中一些函数。
答案 0 :(得分: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