我正在建立一个“前3名”排行榜。我想要显示前三个分数,绘制每个人的最大分数,但我不想限制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中做到这一点呢?
发布于 2013-06-01 16:52:20
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 DESCFIDDLE
发布于 2013-06-01 16:56:21
SELECT name,score
FROM SCORES
WHERE score in (
SELECT distinct s.score
FROM SCORES as s
ORDER BY s.score desc
LIMIT 3)
)
ORDER BY score发布于 2013-06-01 16:47:30
SELECT Name, MAX(Score) Score
FROM TableName a
WHERE EXISTS
(
SELECT 1
FROM TableName b
WHERE a.Score = b.Score
GROUP BY Score
ORDER BY Score DESC
LIMIT 3
)
GROUP BY Name
ORDER BY Score DESC基于上述记录的输出
╔══════╦═══════╗
║ NAME ║ SCORE ║
╠══════╬═══════╣
║ Mark ║ 29 ║
║ John ║ 29 ║
║ Matt ║ 29 ║
║ Luke ║ 28 ║
║ Paul ║ 27 ║
╚══════╩═══════╝https://stackoverflow.com/questions/16870865
复制相似问题