Radim Marek:PostgreSQL 窗口函数的简明介绍
💡
原文英文,约1700词,阅读约需6分钟。
📝
内容提要
理解数据点之间的关系至关重要。窗口函数允许在保留每行细节的同时分析数据,与聚合函数不同。PostgreSQL支持SQL窗口函数,可在表中的相关行之间进行复杂计算。窗口函数特别适用于排名、计算累计总数、查找移动平均值和比较单个条目等任务。窗口函数的语法包括PARTITION BY、ORDER BY和ROWS BETWEEN等关键词。常用的窗口函数包括ROW_NUMBER()、RANK()、DENSE_RANK()、LAG()、LEAD()、FIRST_VALUE()和LAST_VALUE()等。窗口函数的使用可以方便地进行高级分析,如计算差异、比较当前和前一个值、获取未来值等。
🎯
关键要点
- 理解数据点之间的关系至关重要,窗口函数允许在保留每行细节的同时分析数据。
- PostgreSQL支持SQL窗口函数,适用于排名、计算累计总数、查找移动平均值和比较单个条目等任务。
- 窗口函数的语法包括PARTITION BY、ORDER BY和ROWS BETWEEN等关键词。
- 常用的窗口函数包括ROW_NUMBER()、RANK()、DENSE_RANK()、LAG()、LEAD()、FIRST_VALUE()和LAST_VALUE()。
- 窗口函数与聚合函数的主要区别在于,窗口函数保留了每行的详细信息,而聚合函数将数据汇总为单行。
- OVER子句是窗口函数的基本语法,定义了窗口函数如何查看数据。
- 窗口定义部分可以包括分区、排序和框架,分区是必需的。
- 框架允许进一步限制窗口函数计算的数据,使用ROWS BETWEEN和RANGE BETWEEN。
- ROW_NUMBER()函数为结果集中的每一行分配唯一的顺序整数。
- RANK()和DENSE_RANK()函数用于根据一个或多个值的顺序为每一行分配排名,处理平局的方式不同。
- LAG和LEAD函数用于访问前一行或后一行的值,便于计算行之间的差异。
- FIRST_VALUE和LAST_VALUE函数分别返回分区的第一个和最后一个值。
- 可以重用窗口定义,以简化复杂查询的语法。
➡️