有一个有3列的表。 Id是唯一的,得分可以在该表中重复,并且表中包含超过数千个条目。
Id名称得分
问题陈述: -
我必须以这样的方式显示列表
5:有最高分的候选人的名单然后是10名的候选人:有第2高的分数的候选人那么15名:有第3高分的候选人
依此类推..(每个增加5)
答案 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;