This question already has answers here:
MySQL's alternative to T-SQL's WITH TIES

(3个答案)


7年前关闭。




我正在建立“前三名”排行榜。我想显示前三名的分数,绘制每人的最大分数,但我不想限制3,因为我想显示任何拥有前三名的分数的人。因此,例如,使用下面的数据,
+----+-----+
|Name|Score|
+----+-----+
|Matt|   17|
|Mark|   29|
|Luke|   28|
|John|   29|
|Paul|   27|
|Matt|   29|
|Mark|   22|
+----+-----+

我要显示:
+------+-----+
|Name  |Score|
+------+-----+
|1.Matt|   30|
|2.Mark|   29|
|2.John|   29|
|3.Luke|   28|
+------+-----+

我的第一个想法是为每个人提取最大分数,然后在得分变化后停止显示(使用PHP)。
select name, max(score)
from SCORES
group by name
order by name

有什么办法可以直接在SQL中执行此操作吗?

最佳答案

SELECT name, score
FROM SCORES
JOIN (SELECT distinct score score3
      FROM scores
      ORDER BY score DESC
      LIMIT 2, 1) x
ON score >= score3
ORDER by score DESC

FIDDLE

关于mysql - 前三分-MySQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16870865/

10-11 05:25