进展系列生成使得显示n个候选人得分最高,n + 5个候选人得分第二高等等

时间:2014-05-28 04:20:30

标签: mysql sql

有一个有3列的表。 Id是唯一的,得分可以在该表中重复,并且表中包含超过数千个条目。

Id名称得分

问题陈述: -

我必须以这样的方式显示列表

5:有最高分的候选人的名单然后是10名的候选人:有第2高的分数的候选人那么15名:有第3高分的候选人

依此类推..(每个增加5)

2 个答案:

答案 0 :(得分:0)

select @mem_count:=@mem_count+5 as group_member_count, scores.score 
from (select distinct score from scores_table order by score desc) scores, 
    (select @mem_count:=0) sess

查询返回每个分数的分数列表加上成员计数。这将是在下一个陈述中使用的子查询。

select 
    sc.*,
    @group_n:=if(sc.score!=@group,0,@group_n+1) number_in_group,
    @group:=sc.score
from 
    (SELECT @group_n:=0, @group:=-1) row,
    scores_table sc 
    join (the_subquery) sub on sc.score=sub.score
having number_in_group<sub.group_member_count

这里我们定义2个会话变量组(以保持当前分数)和group_n为每行添加组中的数字。

因此,我们期望通过得分和数量对每个得分的所有行进行分组。然后,只有少于group_member_count

的成员才能使用

答案 1 :(得分:0)

使用它 SELECT x。*   来自my_table x   加入my_table y     ON y.marks = x.marks    和y.id&lt; = x.id   组      BY x.marks       ,x.id  有COUNT(0)&lt; =(MAX(101-x.marks)* 2)   订购      BY标记DESC,id;