显示具有重复记录的最高3个标记

时间:2013-07-25 02:37:30

标签: mysql

我的桌子是

enter image description here

我想在页面上显示每个部分的最高3个标记,但如果有人在前3个标记中有相似的标记,我想根据降序中的标记显示重复的标记。我正在使用以下代码。

SELECT Name, Marks FROM mytable AS t1 
INNER JOIN (SELECT DISTINCT(Marks) AS best_marks FROM mytable ORDER BY Marks DESC LIMIT 3) AS t2 ON t1.Marks = t2.best_marks ORDER BY Marks DESC, Name ASC;

所以我的最终出局看起来,

enter image description here

请帮助我......我正在为解决方案而努力。

1 个答案:

答案 0 :(得分:2)

这是使用group_concat()substring_index()获得前三个分数的技巧。我们的想法是在列表中排名前三。然后使用find_in_set()匹配该列表:

select name, marks
from mytable t1 join
     (select section, substring_index(group_concat(distinct Marks order by Marks desc), ',', 3) as Marks3
      from mytable
      group by section
     ) tsum
     on t1.section = tsum.section and
        find_in_set(t1.Marks, tsum.Marks3) > 0
ORDER BY Marks DESC, Name ASC;

Here是一个SQLFiddle,它说明代码在语法上是正确的。