表结构如下:
如上两个表,一个任务表,一个学生做题记录表,求:某个班级下学生所做的所有知识点在所有班级里的排名。
形式如下:
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
分组、排序、加序号,所加的序号就是它的排名
厉害啊,能不能给个解释呢,为什么这样写?
您这样写的是在本班的排名,能否在所有班级里面进行排名呢,形式也如上图,但是排名范围是所有班级?
@BeginMan: 你说的按照所有班级排名的话,是按照知识点来的吗?也就是说某知识点在所有班级中的平均分数排列。
@smartzhaomin: 您说的对,就是这。我苦苦折腾一天了,无果,希望大神给予帮助。
@BeginMan: 这个语句可以用吗?第一个子查询是根据知识点分组,获取每个知识点的平均分,然后根据分数降序排列,在已查询的数据基础上加上序号,而这个序号可以用来代替名次。这样就可以得出你要的结果。
@BeginMan: 这个其实就是把原来的那个语句将知识点和班级调换一下位置就可以了。
@smartzhaomin: 还是要感谢你,