2014-10-18 59 views
0

我有一張表,代表用戶遊戲分數。用戶有一個團隊。我需要檢查用戶總的遊戲得分是否低於其他隊員的得分。檢查用戶得分是否最低分

我的表

id user_id game_id team_id score 
1  31  56  40  0 
2  31  56  40  9 
4  24  56  40  0 
5  24  56  40  5 
7  24  56  40  14 
10  24  57  45  3 

我對這個查詢嘗試,但不起作用

SELECT * FROM score WHERE score = (SELECT MIN(score) FROM score) 
and game_id=56 and team_id=40 and user_id=31 GROUP BY user_id 

這裏

用戶31 game_id 56的總得分和TEAM_ID 40是9
用戶24 game_id 56和team_id 40的總分是19

所以,如果我有user_id的24,然後查詢沒有行受影響

+0

出了兩個用戶的最低綜合評分,你要搞清楚誰擁有了56場比賽得分最低? – jbrahy 2014-10-18 04:41:43

+0

是的,正好這 – shansun 2014-10-18 04:45:10

+0

所以如果有領帶你怎麼辦? – jbrahy 2014-10-18 04:54:50

回答

1

在這裏你走了。

這會告訴你誰了遊戲56

SELECT game_id, team_id, user_id, total_score FROM (
    SELECT game_id, team_id, user_id, sum(score) AS total_score 
    FROM score 
    GROUP BY game_id,team_id, user_id 
) final_scores 
WHERE game_id=56 
ORDER BY total_score limit 1; 
0

試試這個代碼

SELECT * FROM score WHERE score > (SELECT MIN(score) FROM score) 

and game_id=56 and team_id=40 and user_id=31 GROUP BY user_id 

這會給輸出的用戶的總遊戲得分與其他團隊成員的最低

3

要獲得用戶的總成績對於特定團隊中的遊戲,您需要按user_id,game_idteam_id進行分組(根據您的數據模型,您的數據顯示用戶可以有多個記錄 - 可能還有團隊),但是如果需要,您可以刪除AND子句 - 單場比賽):

SELECT user_id, total_score 
FROM (
    SELECT SUM(score) as total_score, user_id, team_id, game_id 
    FROM score 
    WHERE game_id = 56 
    AND team_id = 40 
    GROUP BY user_id, game_id, team_id 
) s 
WHERE s.total_score = MIN(s.total_score) 

我將WHERE子句放入表表達式中,因此數據庫中有較少的行進行求和。