2011-11-16 137 views
2

這裏是我的MySQL表:在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 

我試圖選擇具有最高分的用戶只一旦。例如,由於用戶標識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。有任何想法嗎?

回答

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 
+0

這工作完美。有沒有辦法爲此添加另一個連接?我有一個稱爲用戶的表,它有兩列,用戶名和用戶名。我試圖通過用戶標識將表格用戶的用戶標識鏈接到表格用戶的用戶名。 – user962449

+0

@ user962449我已更新答案以反映其他連接。 –

+0

完美工作。謝謝! – user962449

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

這將顯示關係,不知道你是否想要那些。

+0

其中t2.userid = t2.userid ??我認爲這個問題是關於最高分 – PierrOz

+0

我以爲他想要最高分? – Chris

+0

是的我想要最高分,沒有關係。我只想顯示每個用戶的聯盟最高分。 – user962449

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 
    )