我有一张代表用户游戏得分的表。用户有一个团队。我需要检查用户总游戏分数是否与其他团队成员得分相比最低。
我的桌子
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 :(得分:3)
要获得用户在特定团队中获得的游戏总分,您需要按user_id
,game_id
和team_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
这将使输出用户的总游戏分数最低于其他团队成员