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;


浙公网安备 33010602011771号