Php 显示一列的3个最大值,包括重复值
我试图在页面上显示最高的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条记录,包括重复
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,避免重复数据