Mysql语句处理排序的两种方式

来源:互联网 发布:上海宏知检测 编辑:程序博客网 时间:2024/06/10 02:21

假设有张student表,记录了全级所有班级的所有学生的总成绩 字段 class_id,score,name

class_id name score 1 张三 498 2 李四 510 3 王二 520

第一种:利用了两层子查询的方式,首先在最外层查询所有列,在里层查询当前列的,班级相等,且分数大于当前列的数量当作排名。

select *, (    select count(distinct score) from student s2 where s2.score >= s1.score and s1.class_id = s2.class_id) as rank from student s1 

第二种:利用了两层子查询和变量,中心思想是,首先对所有列根据班级和分数排序,然后在每个班级中对所有分数累加标记数当作排名。
在最里层首先对班级和分数进行排序,并赋值变量,外层如果班级相等,则rank变量+1,classId变量赋值为当前行的班级id

select     s3.*,    if(@classId=s3.class_id, @rank:=@rank+1, @rank=1),    @classId:=s3.class_idfrom    (           select s1.* from student s1,(            select @classId:=null, @rank:=0        ) s2 order by s1.class_id, s1.score    ) s3
原创粉丝点击