【问题标题】:SQL meet conditions based on max valueSQL 根据最大​​值满足条件
【发布时间】:2017-12-21 18:49:05
【问题描述】:

我必须获取用户玩得最多的游戏的 player_id 和 game_code。对于每个玩家,列出他玩得最多的游戏代码(不是他玩的所有游戏)

规则:player_id 是唯一的,玩家可以玩多个游戏(我想知道他玩的最多的游戏)。

我尝试使用 max,但在尝试中迷失了方向。

这里是小提琴:http://sqlfiddle.com/#!9/0cf0f/2

【问题讨论】:

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


    【解决方案1】:

    我相信你想要这个

    SELECT t.player_id, t.game_code, t.minutes_played
    FROM (
          SELECT player_id, MAX(minutes_played) as maxi
          FROM play_table
          WHERE game_code in ('123','124','125','126','129')
          GROUP BY player_id
    ) as m
    INNER JOIN play_table as t
      ON t.player_id = m.player_id and 
         t.minutes_played = m.maxi
    

    sqlfiddle demo

    【讨论】:

    • 听起来真的很棒!我现在必须离开我的电脑,但我会在早上的第一件事就是尝试它,如果它有效,我会为解决方案投票!感谢您的超快速建议!!!干杯
    • 正如我在另一个建议中发布的那样,我只想获取他玩得最多的每个用户的游戏代码。对不起,如果我的描述不够清楚!
    • 能否请教一下,为什么需要这个 INNER JOIN?
    【解决方案2】:

    另一个答案是正确的,但是您需要在子查询中按 player_id 分组,假设您想要所有这些:

    SELECT m.player_id, pt.game_code, pt.minutes_played
    FROM (
        SELECT player_id, max(minutes_played) as maxi
        FROM play_table
        GROUP BY player_id
    ) as m
    INNER JOIN play_table pt
    ON  m.player_id = pt.player_id
    AND pt.minutes_played = m.maxi;
    

    【讨论】:

    • 感谢您的建议,但我得到的结果太多了。我需要获取 player_id 和 game_code,但仅针对他玩得最多的一场游戏。例如 player_id 1 应该只有 game_code 125,因为他玩那个游戏的次数最多。对于 player_id 2 它应该只是 game_code 124 等等......感谢您的帮助!
    猜你喜欢
    • 2021-11-28
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多