首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >前3名-- MySQL

前3名-- MySQL
EN

Stack Overflow用户
提问于 2013-06-01 16:45:32
回答 6查看 3.9K关注 0票数 5

我正在建立一个“前3名”排行榜。我想要显示前三个分数,绘制每个人的最大分数,但我不想限制3个,因为我想显示具有前三个分数的任何人。例如,使用下面的数据,

代码语言:javascript
复制
+----+-----+
|Name|Score|
+----+-----+
|Matt|   17|
|Mark|   29|
|Luke|   28|
|John|   29|
|Paul|   27|
|Matt|   29|
|Mark|   22|
+----+-----+

我想要显示:

代码语言:javascript
复制
+------+-----+
|Name  |Score|
+------+-----+
|1.Matt|   30|
|2.Mark|   29|
|2.John|   29|
|3.Luke|   28|
+------+-----+

我的第一个想法是提取每个人的最大值,然后在分数更改后停止显示(使用PHP)。

代码语言:javascript
复制
select name, max(score)
from SCORES
group by name
order by name

有没有办法直接在SQL中做到这一点呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-06-01 16:52:20

代码语言:javascript
复制
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

票数 6
EN

Stack Overflow用户

发布于 2013-06-01 16:56:21

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2013-06-01 16:47:30

代码语言:javascript
复制
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

  • SQLFiddle Demo

基于上述记录的输出

代码语言:javascript
复制
╔══════╦═══════╗
║ NAME ║ SCORE ║
╠══════╬═══════╣
║ Mark ║    29 ║
║ John ║    29 ║
║ Matt ║    29 ║
║ Luke ║    28 ║
║ Paul ║    27 ║
╚══════╩═══════╝
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16870865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档