怎么在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; 参考技术Bselect 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版 查询各科成绩前三名的记录:(不考虑成绩并列情况)