分组取前几位

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

相关推荐
changshuaihua00117 分钟前
Redis 详解:Redis 与 MySQL 的区别、数据类型与缓存三大问题
数据库·redis·缓存
qetfw25 分钟前
Debian 配置 AIDE 文件完整性检测:基线初始化、变更检查与数据库更新
linux·网络·数据库·debian
Elastic 中国社区官方博客39 分钟前
Elasticsearch:搜索教程 - 语义搜索(三)
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
随风M记忆s2 小时前
Redis支持事务吗?了解Redis的持久化机制吗?
数据库·redis·bootstrap
花青泽4 小时前
5-数据库-SQL注入-联合查询-关键字绕过-day13
数据库·sql
天桥下的卖艺者10 小时前
使用scitable包,两步生成逆概率删失权重(IPCW)
数据库·r语言
隔窗听雨眠10 小时前
AI原生数据库浪潮:国产数据库的架构重构与路径之争
数据库
数据库小学妹10 小时前
数据库选型实战:从数据类型到TCO成本,五维决策框架+九款产品横评
数据库·信创·国产数据库·数据库选型·oracle迁移
神龙天舞200111 小时前
MySQL 备库为什么会延迟好几个小时
android·数据库·mysql
丙氨酸長鏈13 小时前
Web前端入门第 问:JavaScript 一个简单的 IndexedDB 数据库入门示例
前端·javascript·数据库