有其他的方法实现吗
有的,你也可以使用关联的子查询。或者针对数据量较少的数据集的话可以使用Cross Apply。
但是优选方案依然是你现在使用的这个。
一直听别人说窗口函数,我搜了一下也不是很理解,怎么感觉跟聚合函数差不多
聚合函数,顾名思义,最终目标是把很多行的数据集聚合/精简为几行。需要使用Group By子句,按组进行聚合计算(求和、求平均值、最小值等等)。
而窗口函数一般指Over子句,里面具有以下参数:
- PARTITION BY:将查询结果集分为多个分区。
- ORDER BY:定义结果集的每个分区中行的逻辑顺序。
- ROWS/RANGE:通过指定分区中的起点和终点来限制分区中的行数。 它需要
ORDER BY
参数,如果指定了ORDER BY
参数,则默认值是从分区起点到当前元素。
如果未指定任何参数,则将对整个结果集应用开窗函数。
简单理解窗口函数就是,先把数据集分成多个区(即‘窗口’),再分别计算窗口中每一行的值。
所以使用了窗口函数之后,就不需要Group By子句了,最后的结果集的行数不会减少。
以你的这个语句为例,没有指定Partition by,所以默认对整个结果集的每一行都按照overdate顺序进行一次SUM计算。
先计算第一行的SUM结果是100,再计算第二行的SUM结果是100+200=300,再计算第二行的SUM结果是100+200+100=400......以此类推,直到最后一行计算完毕。
如果答案是正确的解决方案,请点击“接受答案”并投赞成票。如果您对此答案有其他疑问,请点击“评论”。