检查用户得分是否为最低得分

时间:2014-10-18 04:28:11

标签: php mysql

我有一张代表用户游戏得分的表。用户有一个团队。我需要检查用户总游戏分数是否与其他团队成员得分相比最低。

我的桌子

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查询,那么没有行影响

3 个答案:

答案 0 :(得分:3)

要获得用户在特定团队中获得的游戏总分,您需要按user_idgame_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子句,因此数据库中的行数较少。

答案 1 :(得分: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;

答案 2 :(得分: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

这将使输出用户的总游戏分数最低于其他团队成员