这是我的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更高。任何想法?
答案 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
)