标题: MySQL 窗口函数 [打印本页] 作者: 缠丝猫 时间: 2022-10-8 20:04 标题: MySQL 窗口函数 1. 窗口函数概念和语法
窗口函数对一组查询行执行类似聚合的操作。然而,聚合操作将查询行分组到单个结果行,而窗口函数为每个查询行产生一个结果:
函数求值发生的行称为当前行
与发生函数求值的当前行相关的查询行组成了当前行的窗口
相比之下,窗口操作不会将一组查询行折叠到单个输出行。相反,它们为每一行生成一个结果。
SELECT
manufacturer, product, profit,
SUM(profit) OVER() AS total_profit,
SUM(profit) OVER(PARTITION BY manufacturer) AS manufacturer_profit
FROM sales;
复制代码
查询中的每个窗口操作都通过包含一个 OVER 子句来表示,该子句指定如何将查询行划分为组以供窗口函数处理:
第一个 OVER 子句是空的,它将整个查询行集视为一个分区。窗口函数因此产生一个全局和,但对每一行都这样做。
第二个 OVER 子句按 manufacturer 划分行,产生每个分区(每个manufacturer)的总和。该函数为每个分区行生成此总和。
窗口函数只允许在查询列表和 ORDER BY 子句中使用。
查询结果行由 FROM 子句确定,在 WHERE、GROUP BY 和 HAVING 处理之后,窗口执行发生在 ORDER BY、LIMIT 和 SELECT DISTINCT 之前。 OVER子句被允许用于许多聚合函数,因此,这些聚合函数可以用作窗口函数或非窗口函数,具体取决于是否存在 OVER 子句: