我正在尝试在页面上显示最高3个标记,我正在使用以下代码。
Select * from myTable Marks Desc Limit 3.
没有重复记录时,它会正常工作。
我的表
Name Mark
------------
S1 90
S2 55
S3 60
S4 90
S5 55
S6 60
S7 88
S8 45
S9 88
与上述表格一样,我想显示包含重复记录的3条记录
所以我的最终输出看起来像
Name Marks
----------------
S1 90
S4 90
S7 88
S9 88
S3 60
S6 60
请帮助我。
答案 0 :(得分:4)
首先选择唯一的3个最佳标记,然后查找具有其中一个标记的所有记录:
SELECT name, mark
FROM mytable AS t1
INNER JOIN
(SELECT DISTINCT(mark) AS best_marks FROM mytable ORDER BY mark DESC LIMIT 3) AS t2
ON t1.mark = t2.best_marks
ORDER BY mark DESC, name ASC;
答案 1 :(得分:0)
您可以尝试使用临时表来存储前3个记录,并通过加入该表来显示结果。
除此之外,在相同的查询中得到这个将是复杂的,并且会产生巨大的性能影响。
如果你坚持,你可以试试这个
SELECT * FROM myTable
WHERE mark IN (SELECT MAX(mark) FROM myTable)
OR mark IN (SELECT MAX(mark) FROM myTable WHERE mark < (SELECT MAX(mark) FROM myTable))
OR mark IN (SELECT MAX(mark) FROM myTable WHERE mark < (SELECT MAX(mark) FROM myTable WHERE mark < (SELECT MAX(mark) FROM myTable)));
这仅适用于前3个。如果你想要更多,那么你需要增加where子句中的条件。但同样,对性能不利