gpt4 book ai didi

sql - 与其他SQL子句相比,PARTITION BY子句的执行顺序是什么?

转载 作者:行者123 更新时间:2023-12-04 22:07:42 28 4
gpt4 key购买 nike

我找不到在SQL中提及Partition By窗口函数执行顺序的任何源代码。

enter image description here

它与Group By的顺序相同吗?

例如表:
enter image description here

enter image description here

Select *, row_number() over (Partition by Name) 
from NPtable
Where Name = 'Peter'

我知道如果首先执行 Where,它将仅查看 Name = 'Peter',然后执行仅聚合此特定人员而不是整个表聚合的window函数,这将更加高效。

但是当查询是:
Select top 1 *, row_number() over (Partition by Name order by Date) 
from NPtable
Where Date > '2018-01-02 00:00:00'

是否不需要先对整个表执行window函数,然后应用 Date>条件,否则结果是错误的?

最佳答案

窗口函数在表的第5阶段SELECT的同一阶段执行/计算。换句话说,窗口函数将应用于SELECT阶段中“可见”的所有行。

在第二个例子中

Select top 1 *, 
row_number() over (Partition by Name order by Date)
from NPtable
Where Date > '2018-01-02 00:00:00'

在逻辑上, WHEREPartition by Name函数的 row_number()之前应用。

请注意,这是处理查询的逻辑顺序,不一定是引擎物理上处理数据的方式。

如果查询优化程序确定扫描整个表的价格便宜,然后根据 WHERE过滤器丢弃日期,则可以执行此操作。但是,任何一种此类转换都必须以使最终结果与您显示的表中概述的逻辑步骤的顺序一致的方式执行。

关于sql - 与其他SQL子句相比,PARTITION BY子句的执行顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54357532/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com