2.5
窗口函数处理
如果查询包含任何窗口函数(见
窗口函数
、
窗口函数
和
窗口函数调用
),这些函数将在任何分组、聚集和
HAVING
过滤被执行之后被计算。也就是说如果查询使用了任何聚集、
GROUP BY
或
HAVING
,则窗口函数
看到的行是分组行而不是来自于
FROM
/
WHERE
的原始表行。
当多个窗口函数被使用,所有在窗口定义中有句法上等效的
PARTITION BY
和
ORDER BY
子句的窗口函
数被保证在数据上的同一趟扫描中计算。因此它们将会看到相同的排序顺序,即使
ORDER BY
没有唯一地
决定一个顺序。但是,对于具有不同
PARTITION BY
或
ORDER BY
定义的函数的计算没有这种保证(在这
种情况中,在多个窗口函数计算之间通常要求一个排序步骤,并且并不保证保留行的顺序,即使它的
ORDER
BY
把这些行视为等效的)。
目前,窗口函数总是要求排序好的数据,并且这样查询的输出总是被根据窗口函数的
PARTITION BY
/
ORDER
BY
子句的一个或者另一个排序。但是,不推荐依赖于此。如果希望确保结果以特定的方式排序,请显式使
用顶层的
ORDER BY
子句。