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

Php 显示一列的3个最大值,包括重复值,php,mysql,sql,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条记录,包括重复

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

请帮助我。

您可以尝试使用一个临时表来存储前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)));

这只适用于前三名。如果需要更多,则需要增加where子句中的or条件。但同样,性能不佳

首先选择唯一的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;

我不想成为粗鲁的朋友,但这个问题很难听:真的,没有必要这么头痛。看我的答案,其实很简单。干杯:你说得对。我的印象是,limit不适用于带有join的内部查询,就像它不适用于union一样。谢谢你消除了这种困惑。。。我试过你的,效果很好。。。伟大的不客气:在性能方面也应该不错:子查询执行一次,然后与表联接。如果标记是索引的,那么它应该是非常快的,并且有很多数据。在代码中使用distinct,避免重复数据