分组取前几位

分组取前几位是数据库查询的常见问题,例如取各班成绩的第一名。这个就需要用到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函数了,要复杂的多。

相关推荐
IvorySQL2 小时前
PostgreSQL 性能:云端与本地的延迟分析
数据库·postgresql
给我来一根2 小时前
用户认证与授权:使用JWT保护你的API
jvm·数据库·python
_F_y2 小时前
MySQL表的操作
android·数据库·mysql
SmartBrain3 小时前
Agent 知识总结
服务器·数据库·笔记
fenglllle3 小时前
MySQL explain format的差异
数据库·mysql
哈哈不让取名字4 小时前
用Pygame开发你的第一个小游戏
jvm·数据库·python
程序员敲代码吗4 小时前
Python异步编程入门:Asyncio库的使用
jvm·数据库·python
志凌海纳SmartX4 小时前
榫卯企业云平台:让企业自建云更简单
数据库
老邓计算机毕设4 小时前
SSM学生信息管理系统ow05a(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·学生信息管理系统·ssm 框架·高校教育管理