mysql 分组后每组取第一个_MySql之高级功能

本文详细介绍了MySQL窗口函数的概念、用途和常见操作,包括rank、dense_rank、row_number的区别,以及如何解决经典排名和TOP N问题。通过实例展示了窗口函数在分组、排序、移动平均等场景的应用,强调其在数据分析中的重要作用。
摘要由CSDN通过智能技术生成

252a330431a58240a05410990a750723.gif

本次需要学习有如下几个部分:

一、什么是窗口函数

二、专用窗口函数rank,dense_rank,row_number有什么区别

三、经典排名问题

四、经典TOP n问题

五、聚合函数作为窗口函数

六、每组中比较

七、窗口函数的移动平均

八、总结

下面为以上内容一一解答:

一、什么是窗口函数

窗口函数,也叫OLAP函数(online anallytical processing ,联机分析处理),可以对数据库数据进行实时分析处理。

基本语法如下:

over (partition by <用于分组的列名>

order by <用于分组的列名>)

窗口函数是对where或者group by子句处理后的结果进行操作,所以窗口函数原则上只能写在select子句中。

实例:

8797be707afd00a51c98f3c80f4c13fe.png

想要在班级分组之后再进行排序,结果如下

fd32ae0bd7b124844eaf103649e34be8.png

select *,rank()over (partition by 班级

order by 成绩 desc)as ranking from 班级表

解释:rank是排序的函数。要求是“每个班级内按成绩排名”,这句话可以分为两部分:

1.每个班级内:按班级分组

partition by用来对表分组。在这个例子中,所以我们指定了按“班级”分组(partition by 班级)

2.按成绩排名

order by 子句的功能是对分组后的结果进行排序,默认是按照升序(asc)排序。在本例中是降序

窗口函数分组与group by分组的区别:

grooup by分组汇总后改变了表的行数,一行只有一个类别。而partition by和rank函数不会减少原表中的行数。

例如:

统计每个班级的人数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值