`
中华好儿孙
  • 浏览: 66243 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

用普通sql代替row_number函数

    博客分类:
  • sql
阅读更多
在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)
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics