用普通sql代替row_number函数

在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)

猜你喜欢

转载自2018scala.iteye.com/blog/2238602