假设 table 表有 id,name,mark 三个字段
查出学生成绩并按成绩进行排名次 ,sql怎么写呢?(成绩相等的学生并列名次)
求大神帮助。
你参考一下下面的代码,可不可行
USE test;
DROP TABLE IF EXISTS `stu_mark`;
CREATE TABLE `stu_mark` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) NOT NULL,
`mark` INT(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO stu_mark(`name`, `mark`)
VALUES ('lisi',10),('zhangsan',20),('wangwu',20),('zhaoliu',30),('liuqi',50),('anjiu',100);
SELECT `name`, `mark`,sor FROM(
SELECT `name`, `mark`
,(CASE WHEN @tMark=mark THEN @tm ELSE @tm :=@tm+1 END) AS sor
,(@tMark:=mark) AS tm
FROM `stu_mark` AS m ,(SELECT @tm :=0,@tMark:=0) AS t1
ORDER BY mark DESC
) AS t2
ORDER BY t2.sor desc
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。