怎么在MYSQL查询学生平均成绩及其名次

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么在MYSQL查询学生平均成绩及其名次相关的知识,希望对你有一定的参考价值。

select a.sid,
@i:=@i+1 as '不保留空缺排名',
@k:=(case when @avg_score=a.avg_s then @k else @i end) as '保留空缺排名',
@avg_score:=avg_s as '平均分'
from (select sid,ROUND(AVG(score),2) as avg_s from SC GROUP BY sid)a,
(select @avg_score:=0,@i:=0,@k:=0)b;
上面这条语句执行没有问题,但是我不明白原来,请解释下。
我想问的是这个语句中三个变量定义的作用,以及这条语句是怎么执行的,保留空缺排名和不保留空缺排名有什么区别,谢谢!

工具/材料:Management Studio。 

1、首先在桌面上,点击“Management Studio”图标。 

2、之后在该界面中,点击左上角“新建查询”选项。 

3、接着在该界面中,输入查询学生平均成绩及其名次的sql语句“select name,AVG(grade),no from test2 group by name,no”。 

4、然后在该界面中,点击左上方“执行”按钮。 

5、最后在该界面中,显示学生平均成绩及其名次成功。

参考技术A mysql表如何根据分数获得排名 set @count=0;select @count=@count+1 as `名次` from table_name order by `分数` desc; 参考技术B

    select sid,ROUND(AVG(score),2) as avg_s from SC GROUP BY sid)a:根据sid算出score列的平均数,保留两位小数,结果起名a;

    (select @avg_score:=0,@i:=0,@k:=0)b:定义@avg_score,@i,@k三个标量,初始值=0,起名b,@avg_score是保存avg_s的值,@i,@k是排序的序列值(第一名,第二名这类)

    @i:=@i+1 as '不保留空缺排名':执行时@i的值在上一次基础上加1,初始值0,第一行@i=1,第二行@i=2,以此类推,这一列的名字起名'不保留空缺排名',也就是'按照成绩排序,成绩相同的排在后面一位’

    @k:=(case when @avg_score=a.avg_s then @k else @i end) as '保留空缺排名':判断@avg_score和a.avg_s相不相等,@avg_score初始值0,第一行是0,第二行的值是第一行avg_s的值,也就是说判断下一个sid的成绩和上一个相不相等,要是相等返回@k,不相等返回@i,@k的值初始值是0,要是 @avg_score和a.avg_s不相等,@k的值就是@i的值,要是 @avg_score和a.avg_s相等,@k的值就是上一行的@i,结果起名'保留空缺排名',也就是‘成绩相同排名并列’

    总结来说就是根据平均分产生不并列排名的成绩和并列排名的成绩,我说的很详细了,应该没问题了

以上是关于怎么在MYSQL查询学生平均成绩及其名次的主要内容,如果未能解决你的问题,请参考以下文章

Mysql多表联查——经典50题

MySQL查询练习

mysql 查询每个班的前十名的成绩

mysql版 查询各科成绩前三名的记录:(不考虑成绩并列情况)

mysql查询指定姓名的学生的学号,姓名,成绩并将该学生的平均分返回,然后还判断指定的名字存不存在数据库里

Mysql常见50条数据查询