MySQL 8 中的窗口函数详解
窗口函数(Window Function)是MySQL 8.0中新增的特性,可以用来计算聚合函数的值,但不会影响查询结果中的行数。窗口函数在SELECT语句的SELECT列表中指定,并且通常与OVER子句一起使用,定义了函数工作的窗口。
窗口函数可以分为以下几类:
- 聚合窗口函数:如ROW\_NUMBER(), RANK(), DENSE\_RANK(), SUM(), AVG(), COUNT(), MIN(), MAX()等。
- 排序窗口函数:如RANK(), DENSE\_RANK(), PERCENT\_RANK(), CUME\_DIST()等。
- 首尾窗口函数:如FIRST\_VALUE(), LAST\_VALUE()等。
- 聚合起始窗口函数:如LEAD(), LAG()等。
- NTILE窗口函数。
以下是一个使用窗口函数的例子,假设我们有一个名为sales的表,包含year和revenue两个字段:
SELECT
year,
revenue,
SUM(revenue) OVER (ORDER BY year) AS running_total,
AVG(revenue) OVER (ORDER BY year ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS moving_average
FROM
sales;
在这个例子中,SUM()
是一个聚合窗口函数,用于计算按year排序的累计收入。OVER
子句定义了窗口的范围,这里是ORDER BY year
,表示按年份排序。AVG()
是另一个窗口函数,用于计算当前行、前一行的平均值,这里使用了ROWS BETWEEN 1 PRECEDING AND CURRENT ROW
来指定窗口范围。
评论已关闭