分组取前几位

分组取前几位是数据库查询的常见问题,例如取各班成绩的第一名。这个就需要用到ROW_NUMBER函数,这个函数Oracle,SQLServer,MySQL(需8.0以上版本)都是支持的,核心用法也一样:PARTITION BY分组 + ORDER BY排序 + 外层筛选使用rn筛选。

假设表student_score有如下字段

studentid 学生id

score 总分

student_info 学生表

studentid 学生id

classid 班级

studentname 学生姓名

查询语句如下:

select * from (

select a.*

ROW_NUMBER()

OVER (PARTITION BY a.classid ORDER BY a.score DESC) AS rn --核心点1

from (select studentid,studentname,classid,score from student_score left join student_info on student_score.studentid=student_info.studentid)a

)

where rn=1 --核心点2

低版本只能使用max函数了,要复杂的多。

相关推荐
成为大佬先秃头9 小时前
数据库连接池:Druid
数据库·mysql·druid
晓华-warm11 小时前
Warm-Flow 1.8.5 正式发布:超时自动审批、暂存功能来了!
数据库
u01368638212 小时前
将Python Web应用部署到服务器(Docker + Nginx)
jvm·数据库·python
light blue bird12 小时前
多页签Razor组支轴业务整顿组件
数据库·.net·ai大数据·多功能图表报表·web mvc + razor
wregjru13 小时前
【mysql】2.数据表操作
数据库·mysql
手握风云-13 小时前
基于 Java 的网页聊天室(三)
服务器·前端·数据库
LcVong13 小时前
MySQL 5.2/5.7 开启Binlog日志详细步骤(附验证+查看+恢复)
数据库·mysql·adb
FL4m3Y4n13 小时前
MySQL缓存策略
数据库·mysql·缓存
wsx_iot13 小时前
TDengine学习
数据库·学习·tdengine
不吃香菜的小趴菜13 小时前
mysql数据库打包与导入
数据库·mysql