【问题标题】:Fetch up to 2 users of each team with the greatest result MYSQL [duplicate]以最大的结果 MYSQL 获取每个团队的最多 2 个用户 [重复]
【发布时间】:2016-06-16 20:25:58
【问题描述】:
| id | user  | team   | month | result |
|----|-------|--------|-------|--------|
| 1  | Joe   | red    | sept  | 100    |
| 2  | Joe   | red    | oct   | 40     |
| 3  | Jim   | red    | sept  | 70     |
| 4  | Jim   | red    | oct   | 50     |
| 5  | Susy  | red    | sept  | 40     |
| 6  | Tim   | blue   | sept  | 60     |
| 7  | Tim   | blue   | oct   | 100    |
| 8  | Betty | blue   | sept  | 70     |
| 9  | Dave  | blue   | sept  | 20     |
| 10 | Stan  | green  | oct   | 40     |
| 11 | Alan  | green  | sept  | 80     |
| 12 | Tina  | green  | oct   | 100    |
| 13 | Tina  | green  | sept  | 30     |
| 14 | Rick  | yellow | oct   | 50     |
| 15 | Ellen | yellow | oct   | 60     |

这可能吗?

我需要从每个团队中获取最多 2 个用户,并获得最佳结果。

例如,以下结果是每支球队中得分最高的 2 名球员:

| 1  | Joe   | red    | sept  | 100    |
| 3  | Jim   | red    | sept  | 70     |
| 7  | Tim   | blue   | oct   | 100    |
| 8  | Betty | blue   | sept  | 70     |
| 12 | Tina  | green  | oct   | 100    |
| 11 | Alan  | green  | sept  | 80     |
| 15 | Ellen | yellow | oct   | 60     |
| 14 | Rick  | yellow | oct   | 50     |

或者是对多个查询执行此操作的唯一真正方法?

【问题讨论】:

  • '最多 2' ??您的意思是因为一个团队可能只有 1 个结果?
  • 是的,一个团队只能有一个成员

标签: mysql sql group-by


【解决方案1】:

您可以尝试以下方法:

select t.*
from `tbl` t
where ( select count(*)
        from `tbl`
        where `team` = t.`team` and `result` >= t.`result` ) < 3

SQLFiddle

【讨论】:

    【解决方案2】:

    你可以这样做:

    SELECT * FROM 
        (SELECT t.id,t.team,count(*) as rnk
        FROM YourTable t
        INNER JOIN YourTable s
         ON(t.id = s.id and t.team = s.team and t.result >= s.result))x
    WHERE rnk <= 2
    

    【讨论】:

    • 感谢@Mihai 编辑
    猜你喜欢
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 2014-04-27
    • 2018-12-09
    • 2016-01-29
    • 1970-01-01
    相关资源
    最近更新 更多