开窗函数、聚合函数、排序函数
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
补充:通过count()实现排序函数
case:对所有员工的薪水按照salary降序进行1-N的排名
实现dense_rank()和rank() 在于是否去重
select
emp_no,
salary,
(
select
count(distinct salary)
from
salaries s2
where
s1.salary <= s2.salary
) as t_rank
from
salaries s1
order by
t_rank,
emp_no
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix