【发布时间】:2020-05-13 16:45:51
【问题描述】:
通常的SQL逻辑处理顺序是:
FROM
ON
JOIN
WHERE
GROUP BY
WITH CUBE or WITH ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP
OVER子句在SQL逻辑处理顺序中的位置?我试图从逻辑上理解 OVER 是否在数据分组之后发生(即 - 在 HAVING 之后和 SELECT 之前)。我很困惑 DISTINCT、ORDER BY 和 TOP 是否对 OVER 子句使用的数据窗口有任何影响。
【问题讨论】:
-
OVER是表达式的一部分,例如在SUM或LAG中,它没有自己的执行顺序,因为OVER本身没有查询的一部分。SUM或LAG将在它声明的任何位置运行(这可能是查询的HAVING或SELECT部分)。您要问的类似于“CASE在执行顺序中的位置”或“CONVERT在执行顺序中的位置?” -
@Larnu 我认为问题是一般何时执行 windowed/analytical functions 及其含义 - 即何时可以使用结果、嵌套过滤器和很快。在我看来这是一个很好的问题 - 它有助于理解为什么你不能在 WHERE 中使用结果,为什么你可以在窗口函数中使用聚合以及如何使用 QUALIFY 子句(供应商扩展)进行过滤
标签: sql sql-server window-functions