2012-06-28 58 views
3

我對MySQL並沒有太多的瞭解,但我只需要一個語句,我真的很感謝你對此的幫助。MySQL結合select與其他表的總和

我有兩個表: '用戶' 和 '分數'

這裏的 '用戶' 的結構:

| user_id | user_name | 
| 1  | Paul  | 
| 2  | Peter  | 

這裏的 '分數' 的結構:

| score_id | score_user_id | score_track_id | score_points | 
| 1  | 2    | 23    | 200   | 
| 2  | 2    | 25    | 150   | 

現在我需要一個查詢,爲我提供某種高分列表。結果應包含USER_ID,user_name和那些與用戶的所有分數的總和:我應該是這樣的:

| user_id | user_name | scores | 
| 1  | Paul  | 0  | 
| 2  | Peter  | 350 | 

更妙的是,如果結果將在用戶位置的順序進行排序在全球排名是這樣的:

| position | user_id | user_name | scores | 
| 1  | 2  | Peter  | 350 | 
| 2  | 1  | Paul  | 0  | 

我想這會導致語法錯誤的語句

SELECT user_id as current_user, user_name, SUM(SELECT score_points FROM score WHERE score_user_id = current_user) as ranking FROM user ORDER BY ranking DESC 

。 對我來說,主要的問題是將'user'的user_id連接到'score'中的score_user_id。

非常感謝你的幫助

回答

6

你只需要組你的分數由用戶:

SELECT @p:[email protected]+1 AS position, t.* 
FROM (
    SELECT user.user_id, 
      user.user_name, 
      IFNULL(SUM(score.score_points),0) AS total_points 
    FROM  user LEFT JOIN score ON user.user_id = score.score_user_id 
    GROUP BY user.user_id 
    ORDER BY total_points DESC 
) AS t JOIN (SELECT @p:=0) AS initialisation 

看到它的sqlfiddle

+0

這是快速和完美的作品。非常感謝你! – Chris

+0

@Chris:沒問題。看到我的更新,包括排名。 – eggyal