内容提要
窗口函数与标准聚合函数不同,它们在特定行的“窗口”内计算值,而不是合并行。常见的窗口函数包括排名函数(如RANK())、聚合函数(如SUM())和偏移函数(如LAG())。使用PARTITION BY可以按类别计算值,适合跟踪变化和计算移动平均。大多数现代关系数据库支持窗口函数,但语法和性能优化可能有所不同。
关键要点
-
窗口函数与标准聚合函数不同,计算特定行的值而不是合并行。
-
常见的窗口函数包括排名函数(如RANK())、聚合函数(如SUM())和偏移函数(如LAG())。
-
使用PARTITION BY可以按类别计算值,适合跟踪变化和计算移动平均。
-
LAG()和LEAD()函数允许访问前一行或下一行的值,适合跟踪变化。
-
窗口框架(ROWS BETWEEN)可用于计算滚动平均或运行总和。
-
大多数现代关系数据库支持窗口函数,但语法和性能优化可能有所不同。
-
PostgreSQL、MySQL(8.0+)、SQL Server(2012+)、Oracle(11g+)、IBM Db2支持窗口函数。
-
MySQL(<8.0)和SQLite对窗口函数的支持有限。
-
不同平台对窗口函数的优化和支持存在差异。
-
确保PARTITION BY或ORDER BY中使用的列已建立索引以提高性能。
延伸问答
窗口函数与标准聚合函数有什么区别?
窗口函数计算特定行的值,而不是合并行,保持行级细节。
常见的窗口函数有哪些?
常见的窗口函数包括RANK()、SUM()和LAG()等。
如何使用PARTITION BY进行分组计算?
使用PARTITION BY可以按类别计算值,例如计算每个部门的平均工资。
LAG()和LEAD()函数的作用是什么?
LAG()和LEAD()函数允许访问前一行或下一行的值,适合跟踪变化。
如何计算移动平均或运行总和?
可以使用窗口框架(ROWS BETWEEN)来计算移动平均或运行总和。
哪些数据库支持窗口函数?
支持窗口函数的数据库包括PostgreSQL、MySQL(8.0+)、SQL Server(2012+)等。