mysql 窗口函数
2023-09-04
来源:bilibili视频 和
CSDN https://blog.csdn.net/weixin_42521211/article/details/121702369
CSDN https://blog.csdn.net/mjh1667002013/article/details/128140257
一.什么是窗口函数
基本含义:
窗口限定一个范围,它可以理解为满足某些条件的记录集合,窗口函数也就是在窗口范围内执行的函数。
基本语法:
窗口函数有over关键字,指定函数执行的范围,可分为三部分:分组子句(partition by) 排序子句(order by) 窗口子句(rows)
create table SQL_S(
cid varchar(4),
sname varchar(4),
score INT)
insert into SQL_S values('001','张三',78),('001','李四',82),('002','小明',90),('001','王五',67)
,('002','小红',85),('002','小刚',62);
select *,SUM(score) over(partition by cid) as '班级总分' from SQL_S;
对比GROUP by:
select cid,SUM(score) as '班级总分' from SQL_S group by cid;
select *,SUM(score) over(partition by cid order by score) as '班级总分' from SQL_S;
二、函数类型
排序类函数
rank()函数:生成数据项在分组中的排名,排名相等会在名次中留下空位。比如出现1,2,2,4,4,6,7
ROW_NUMBER()函数:从1开始,按照顺序。比如出现1,2,3,4,5,6,7
DENSE_RANK()函数:生成数据项在分组中的排名,排名出现为1,2,2,3,3,4
聚合类函数
sum() avg() max() min()
select *,
sum(score) over (order by student_num ) as current_sum,
avg(score) over (order by student_num ) as current_avg,
count(score) over (order by student_num ) as current_count,
max(score) over (order by student_num ) as current_max,
min(score) over (order by student_num ) as current_min
from class;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~