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

selecta.sid,@i:=@i+1as'不保留空缺排名',@k:=(casewhen@avg_score=a.avg_sthen@kelse@iend)as'保留空... 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;
上面这条语句执行没有问题,但是我不明白原来,请解释下。
我想问的是这个语句中三个变量定义的作用,以及这条语句是怎么执行的,保留空缺排名和不保留空缺排名有什么区别,谢谢!
展开
 我来答
仁昌爱娱乐
高粉答主

2020-01-19 · 专注关心娱乐
仁昌爱娱乐
采纳数:760 获赞数:459737

向TA提问 私信TA
展开全部

工具/材料:Management Studio。 

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

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

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

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

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

紫薇命free
2019-04-18 · TA获得超过3349个赞
知道大有可为答主
回答量:5881
采纳率:2%
帮助的人:266万
展开全部
mysql表如何根据分数获得排名 set @count=0;select @count=@count+1 as `名次` from table_name order by `分数` desc;
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我配合的演出
2019-04-30 · TA获得超过191个赞
知道小有建树答主
回答量:150
采纳率:38%
帮助的人:48.1万
展开全部
  1. select sid,ROUND(AVG(score),2) as avg_s from SC GROUP BY sid)a:根据sid算出score列的平均数,保留两位小数,结果起名a;

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

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

  4. @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,结果起名'保留空缺排名',也就是‘成绩相同排名并列’

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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式