用普通sql代替row_number函数

本文介绍了一种在SQLite数据库中不使用内置的排名函数的情况下,如何通过SQL查询获取每个班级成绩最高的学生的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在sqllite这样的数据库里没有row_number或者rank这样的分析函数, 但有时候需要实现一些需求比如取各班的成绩第一名的学生,这时候如果数据库里没有分析函数,也可以使用普通sql来解决。
CREATE TABLE stugrade (
stuid VARCHAR(10),
stuname VARCHAR(100) not NULL,
score INT,
classid VARCHAR(5) ,
PRIMARY KEY(stuid)
)ENGINE=INNODB DEFAULT CHARSET=utf8


INSERT INTO stugrade(stuid,stuname,score,classid)
SELECT '001','小明',93,'1'
union ALL
SELECT '002','小李',80,'1'
union ALL
SELECT '003','小张',95,'2'
union ALL
SELECT '004','小王',91,'2'
union ALL
SELECT '005','小猪',70,'3'


SELECT t.stuid,
t.stuname,
t.score,
t.classid
FROM stugrade t
where t.score = (SELECT max(tmp.score) from stugrade tmp where tmp.classid=t.classid)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值