我的桌子是
我想在页面上显示每个部分的最高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;
所以我的最终出局看起来,
请帮助我......我正在为解决方案而努力。
答案 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,它说明代码在语法上是正确的。