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