【问题标题】:Selecting distinct values in a mysql table在 mysql 表中选择不同的值
【发布时间】:2011-11-16 21:30:02
【问题描述】:

这是我的 mysql 表:

Table League(userid 和 lid 是主键):

*userid*  *lid*     rank    win     loss     streak  score
---------------------------------------------------------
    2       1        1       2       0         2      10
    2       3        2       1       1         1       5
    5       1        2       1       1         1       5

我试图只选择一次得分最高的用户。例如,由于用户 ID 2 在联赛(盖子)1 和 3 中,因此在查询中只会选择他的最高分。因此,在这种情况下,将选择得分为 10 的行,因为这是用户在联赛 1 和 3 中的最高得分。将不会选择带有盖子 3 的行。

所以查询结果应该是这样的:

userid  lid     rank    win     loss     streak  score
---------------------------------------------------------
  2      1       1       2       0         2      10
  5      1       2       1       1         1       5

如您所见,用户 ID 2 和盖子 3 不在结果中,因为盖子 1 的得分 10 比联赛 3 的得分 5 高。有什么想法吗?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:
    SELECT l.userid, u.username, l.lid, l.rank, l.win, l.loss, l.streak, l.score
        FROM (SELECT userid, MAX(score) AS MaxScore
                  FROM League 
                  GROUP BY userid) q
            INNER JOIN League l
                ON q.userid = l.userid
                    AND q.MaxScore = l.score
            INNER JOIN users u
                ON l.userid = u.userid
    

    【讨论】:

    • 这非常有效。有没有办法为此添加另一个联接?我有一个名为 users 的表,它有两列,用户 ID 和用户名。我正在尝试通过 userid 将 table League 中的 userid 链接到 table 用户的用户名。
    • @user962449 我已经更新了答案以反映额外的加入。
    【解决方案2】:
    SELECT *
    FROM table t1
    WHERE t1.score = (SELECT MAX(t2.score)
      FROM table t2
      WHERE t1.userid = t2.userid)
    

    这会显示领带,不知道你要不要。

    【讨论】:

    • 哪里 t2.userid = t2.userid ??我认为问题是关于最高分
    • 我以为他想要最高分?
    • 是的,我想要最高分,没有平局。我只想显示每个用户在一个联赛中的最高分。
    • 我停顿了一秒,因为我在考虑排名,所以我进入了 MIN,但后来我仍然写了 score... 已修复,谢谢双方
    • 我没有收到这个查询。我只有一张表,但您在示例中显示了两张表。
    【解决方案3】:

    这里是最简单的解决方案:

    SELECT *
    FROM League t1 
    WHERE 
      t1.lig = (SELECT t2.lig
            FROM League t2
            WHERE t2.userid = t1.userid
            ORDER BY score desc
            LIMIT 1
         )
    

    【讨论】:

      猜你喜欢
      • 2011-02-16
      • 1970-01-01
      • 2013-10-20
      • 2017-03-25
      • 1970-01-01
      • 2016-05-03
      • 2011-08-26
      • 2018-07-31
      • 2014-01-27
      相关资源
      最近更新 更多