SQL开窗函数(Window Functions)主要用于对数据集进行分区和排序,并在每个分区内进行聚合计算,同时保持数据的行级细节。
开窗函数的语法形式为:函数 + OVER(PARTITION BY <分组用列> ORDER BY <排序用列>)。其中,PARTITION BY用于定义分区,ORDER BY用于定义窗口内数据的排序。括号中的两个关键词PARTITION BY和ORDER BY可以只出现一个
-累计求和
SELECT sale_date, daily_sales, SUM(daily_sales) OVER (ORDER BY sale_date) AS running_total FROM sales;
开窗函数必须与聚合函数或排序函数一起使用.
聚合函数一般指SUM(),MAX(),MIN,COUNT(),AVG()等常见函数。
排序函数一般指RANK(),ROW_NUMBER(),DENSE_RANK(),NTILE()等。
RANK()函数,排名函数,可以对某一个字段进行排名。
ROW_NUMBER()函数作用就是将SELECT查询到的数据进行排序,每一条数据加一个序号。ROW_NUMBER()函数还可以取指定顺序的数据。
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY SCORE DESC) AS 总排序
FROM Scores
) t WHERE t.总排序=2
ROW_NUMBER()是排序,当存在相同数据时,ROW_NUMBER()会依次进行排序,他们序号不相同,而Rank()则不一样。如果出现相同的,他们的排名是一样的。
DENSE_RANK()函数也是排名函数,和RANK()功能相似,也是对字段进行排名,特别是对于有数据相同的情况,DENSE_RANK()排名是连续的,RANK()是跳跃的排名,一般情况下用的排名函数就是RANK() [rank 1 1 3 4] [DENSE_RANK 1 1 2 3]
NTILE()函数是将有序分区中的行分发到指定数目的组中,各个组有编号,编号从1开始,就像我们说的'分区'一样 ,分为几个区,一个区会有多少个。
学习参考
https://blog.csdn.net/2401_82584055/article/details/139359910