SQL 窗口范围

SQL windowing scope

我正在学习如何使用窗口函数并遇到了这个 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 分组计算的。

Window 函数和聚合函数。 . .当您第一次开始一起使用它们时,它们看起来很笨拙。分区子句与第一个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

事实上,您不能将 window 函数作为聚合函数的参数:

 sum( sum(ss_ext_sales_price) over (partition by i_class) ) as revenueratio