分组取前几位

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

相关推荐
lilian2331 小时前
Harmony os 技术实战|拼豆制图27:用单字符编码承载 50 张 70×70 图纸
前端·数据库·华为·harmonyos
皮卡丘不断更1 小时前
手机优先的 Personal Ledger:把账目、学习和复盘放到同一个入口
数据库·sqlite·fastapi·开源项目·个人效率
保卫大狮兄2 小时前
设备管理从台账到报废,完整生命周期一次讲清
数据库·设备管理·设备
数据安全技术观察3 小时前
数据动态脱敏:让脱敏策略跟着数据目录走
大数据·网络·数据库
小席是个热心肠3 小时前
Redis的自我学习
数据库·redis·学习
2601_965798474 小时前
Salient Theme Setup Guide for Fast Creative WordPress Sites
数据库·web3·php·wordpress
@Mike@4 小时前
09-数据库学习笔记(数据库索引与过滤器)
数据库·笔记
程序员夏洛5 小时前
MySQL 中 count(*)、count(1) 和 count(字段名) 有什么区别?
数据库·mysql
Wang's Blog6 小时前
PostgreSQL笔记34:索引优化策略全景解析——从B-tree到HOT的核心原理与实践
数据库·笔记·postgresql
l1258656 小时前
# RAG向量数据库优化实战:HNSW索引调参与生产级性能设计
数据库·python·mysql·langchain