Mysql 获取最大值和对应的列

Mysql 获取最大值和对应的列,mysql,sql,greatest-n-per-group,Mysql,Sql,Greatest N Per Group,如何从mysql中的max查询中获取相应的列?我想知道一个玩家赢了多少场。我将通过计算玩家赢得的游戏数量来发现这一点。这将通过选择每场比赛的最大值和最终的玩家id来完成。但是我不知道如何获得相应的玩家id 我有 id | game_id | player_id | score 1 | 1 | 1 | 254 2 | 1 | 2 | 194 3 | 2 |

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

我有

   id   |   game_id | player_id | score

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

此查询应获得您需要的内容:

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)
它假设平局是双方的胜利

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

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\u id}
替换为您正在寻找的玩家,而
wins
是他们的胜利或平局数。

此查询将获得您需要的:

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)
它假设平局是双方的胜利

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

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。我如何编辑它以显示赢家和输家的数量?不,没关系,我会把它改为一分钟,然后把它们都算出来subqueries@Nicola是的,您可以只添加另一个子查询,但您还需要做一些其他修改,以便在一个查询中同时获得成功和失败。啊,我想知道我是否可以更好地重做我的模式。你觉得怎么样?谢谢。这很有效。我无法相信得到简单的东西是多么复杂!我想我完全误解了预期的结果。关于我的分数误用,你是对的+1,以使其适合OP。我如何编辑它以显示赢家和输家的数量?不,没关系,我会把它改为一分钟,然后把它们都算出来subqueries@Nicola是的,您可以只添加另一个子查询,但您还需要做一些其他修改,以便在一个查询中同时获得成功和失败。啊,我想知道我是否可以更好地重做我的模式。你怎么认为?