显示3列的最大值,包括重复值

时间:2013-07-22 10:13:20

标签: php mysql sql

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

请帮助我。

2 个答案:

答案 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子句中的条件。但同样,对性能不利