4

我正在尝试在页面上显示最高 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

请帮助我。

4

2 回答 2

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;
于 2013-07-22T10:22:21.253 回答
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 子句中增加 or 条件。但同样,对性能不利

于 2013-07-22T10:21:24.563 回答