窗口函数(Window Functions)中的Window子句用于指定计算的范围,即函数对哪些行进行操作。其默认范围取决于是否同时使用了PARTITION BY和ORDER BY子句。
-
当只有
ORDER BY子句,没有PARTITION BY和Window子句时:- 默认的Window范围是从整个结果集的第一行到当前行,即
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW。
- 默认的Window范围是从整个结果集的第一行到当前行,即
-
当使用
PARTITION BY子句但没有明确指定Window子句时:- Window函数会在每个由
PARTITION BY定义的分区内独立运行。 - 对于每个分区,如果没有明确指定
Window子句且只有ORDER BY,则默认的Window范围仍然是从该分区的第一行到当前行。
- Window函数会在每个由
-
当没有
ORDER BY和Window子句时:- 如果Window函数没有
ORDER BY子句(无论是否有PARTITION BY),并且没有明确指定Window子句,那么Window的范围默认是整个分区(如果有PARTITION BY)或整个结果集(如果没有PARTITION BY)。但请注意,这种情况下,某些窗口函数(如LEAD和LAG)可能无法正常工作,因为它们需要明确的顺序来确定“前一行”或“后一行”。
- 如果Window函数没有
-
Window子句的具体形式:
- Window子句可以明确指定范围,如
(ROWS | RANGE) BETWEEN ... AND ...。其中ROWS表示按物理行数计算,而RANGE则可能基于某些字段值的范围来计算。 - 常见的范围选项有:
UNBOUNDED PRECEDING:从分区的开始到当前行N PRECEDING:从当前行往前数N行CURRENT ROW:当前行N FOLLOWING:从当前行往后数N行UNBOUNDED FOLLOWING:从当前行到分区的结束
- Window子句可以明确指定范围,如
结合上述信息,可以总结出窗口函数Window子句的默认范围通常是从分区的开始到当前行(如果使用了PARTITION BY和ORDER BY),或者整个分区/结果集(如果没有ORDER BY且没有明确指定Window子句)。但在实际使用中,为了明确和精确控制计算范围,通常会显式指定Window子句。
1090

被折叠的 条评论
为什么被折叠?



