SQL窗口范围

时间:2016-05-05 16:37:01

标签: sql partitioning windowing

我正在学习如何使用窗口函数并遇到了这个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 个答案:

答案 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