【问题标题】:Get Max value and corresponding column获取最大值和对应的列
【发布时间】:2013-03-14 19:30:16
【问题描述】:

如何从 mysql 的最大查询中获取对应的列?我想知道一个玩家有多少胜。我会通过计算玩家赢得的游戏数量来发现这一点。这将通过选择每场比赛的最大值和结果 player_id 来完成。但是我不确定如何获取相应的 player_id。

我有

   id   |   game_id | player_id | score

    1   |     1     |     1     |   254
    2   |     1     |     2     |   194
    3   |     2     |     1     |   432
    4   |     2     |     2     |   298

【问题讨论】:

    标签: mysql sql greatest-n-per-group


    【解决方案1】:

    这个查询应该得到你需要的:

    SELECT
        player_id, game_id, score
    FROM
    (
        SELECT game_id,MAX(score) AS MaxScore
        FROM games
        GROUP BY game_id
    ) AS Winners
    JOIN games
        ON (games.game_id = Winners.game_id AND games.score = Winners.MaxScore)
    

    假设平局是双方玩家的胜利。

    SQLFiddle

    如果您只想获取玩家及其获胜次数,可以使用以下查询:

    SELECT
        player_id, COUNT(*) AS wins
    FROM
    (
        SELECT game_id,MAX(score) AS MaxScore
        FROM games
        GROUP BY game_id
    ) AS Winners
    JOIN games
        ON (games.game_id = Winners.game_id AND games.score = Winners.MaxScore)
    WHERE player_id = {player_id}
    GROUP BY player_id
    

    只需将{player_id} 替换为您要查找的玩家,wins 就是他们的胜场数或平局数。

    【讨论】:

    • 谢谢。这行得通。我无法相信把事情变得简单是多么复杂!
    • 我想我完全误解了想要的结果。你对我的分数误用是对的。 +1 使其适合 OP。
    • 如何编辑它以显示输赢的数量?不,没关系,我只需要一分钟,然后计算并将它们都作为子查询
    • @Nicola 是的,您可以只添加另一个子查询,但您还需要进行一些其他修改,以便在一个查询中获得胜利和失败。
    • 啊,我想知道我是否会更好地重做我的架构。你怎么看?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2014-09-26
    • 2014-12-21
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多