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