首页 新闻 会员 周边 捐助

mysql 排名问题

0
悬赏园豆:40 [已解决问题] 解决于 2013-10-15 17:23

表结构如下:

如上两个表,一个任务表,一个学生做题记录表,求:某个班级下学生所做的所有知识点在所有班级里的排名。

形式如下:

BeginMan的主页 BeginMan | 初学一级 | 园豆:34
提问于:2013-10-15 14:27
< >
分享
最佳答案
0

SELECT a.*,@rownum:=@rownum+1 as rownum

from (SELECT @rownum:=0) r,(

  SELECT t.title, SUM (s.score) / COUNT (s.student) as avg_score
  FROM study s, task t
  WHERE s.task_id = t.id AND s.class_id = 12 
  GROUP BY t.obj_id, t.title) a

order by a.avg_score desc

分组、排序、加序号,所加的序号就是它的排名

收获园豆:40
smartzhaomin | 菜鸟二级 |园豆:252 | 2013-10-15 15:13

厉害啊,能不能给个解释呢,为什么这样写?

BeginMan | 园豆:34 (初学一级) | 2013-10-15 16:10

您这样写的是在本班的排名,能否在所有班级里面进行排名呢,形式也如上图,但是排名范围是所有班级?

BeginMan | 园豆:34 (初学一级) | 2013-10-15 16:29

@BeginMan: 你说的按照所有班级排名的话,是按照知识点来的吗?也就是说某知识点在所有班级中的平均分数排列。

smartzhaomin | 园豆:252 (菜鸟二级) | 2013-10-15 16:35

@smartzhaomin: 您说的对,就是这。我苦苦折腾一天了,无果,希望大神给予帮助。

BeginMan | 园豆:34 (初学一级) | 2013-10-15 16:38

@BeginMan: 这个语句可以用吗?第一个子查询是根据知识点分组,获取每个知识点的平均分,然后根据分数降序排列,在已查询的数据基础上加上序号,而这个序号可以用来代替名次。这样就可以得出你要的结果。

smartzhaomin | 园豆:252 (菜鸟二级) | 2013-10-15 16:38

@BeginMan: 这个其实就是把原来的那个语句将知识点和班级调换一下位置就可以了。

smartzhaomin | 园豆:252 (菜鸟二级) | 2013-10-15 16:42

@smartzhaomin: 还是要感谢你,

BeginMan | 园豆:34 (初学一级) | 2013-10-15 17:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册