1

我的桌子是

在此处输入图像描述

我想在页面上显示每个部分的最高 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;

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

在此处输入图像描述

请帮助我......我正在努力寻找解决方案。

4

1 回答 1

2

group_concat()这是使用and获得前三名的技巧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;

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

于 2013-07-25T02:42:11.997 回答