本节介绍如何使用窗口函数。中函数 讨论中相同的销售信息数据集:
窗口函数对一组查询行执行类似聚合的操作。然而,聚合操作将查询行分组为单个结果行,而窗口函数为每个查询行生成一个结果:
例如,使用销售信息表,这两个查询执行聚合操作,为作为一个组的所有行生成单个全局总和,并按国家/地区分组总和:
相比之下,窗口操作不会将查询行组折叠为单个输出行。相反,它们为每一行生成一个结果。与前面的查询一样,以下查询使用 , 但这次作为窗口函数:
查询中的每个窗口操作都通过包含一个子句来表示,该子句指定如何将查询行划分为组以供窗口函数处理:
窗口函数只允许在选择列表和 子句中使用。查询结果行由子句确定,after , , and 处理,开窗执行发生在, , 和之前。
许多聚合函数都允许该子句,因此可以将其用作窗口或非窗口函数,具体取决于该 子句是否存在:
有关每个聚合函数的详细信息,请参阅 。
MySQL 还支持仅用作窗口函数的非聚合函数。对于这些,该条款是强制性的:
有关每个非聚合函数的详细信息,请参阅 。
作为这些非聚合窗口函数之一的示例,此查询使用,它生成其分区内每一行的行号。在这种情况下,行按国家/地区编号。默认情况下,分区行是无序的,行编号是不确定的。要对分区行进行排序, 请在窗口定义中包含一个子句。该查询使用无序和有序分区(the 和 列)来说明省略和包含之间的区别:
如前所述,要使用窗口函数(或将聚合函数视为窗口函数), 请在函数调用后包含一个子句。该 子句有两种形式:
两种形式都定义了窗口函数应该如何处理查询行。它们的区别在于窗口是直接在子句中定义,还是由对查询中其他地方定义的命名窗口的引用提供:
对于语法,窗口规范有几个部分,都是可选的:
)
/code>
如果为空,则窗口由所有查询行组成,窗口函数使用所有行计算结果。否则,括号内的子句确定哪些查询行用于计算函数结果以及它们如何分区和排序:
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/11049.html