在mysql表中选择不同的值

时间:2011-11-16 21:30:03

标签: mysql sql

这是我的mysql表:

表联盟(用户ID和盖子是主键):

*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

正如你所看到的,带有盖子3的用户2不在结果中,因为来自盖子1的得分10比来自联赛3的得分5更高。任何想法?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

SELECT *
FROM table t1
WHERE t1.score = (SELECT MAX(t2.score)
  FROM table t2
  WHERE t1.userid = t2.userid)

这将显示关系,不知道你是否想要那些。

答案 2 :(得分:0)

这是最简单的解决方案:

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