【问题标题】:Check user score is lowest score or not检查用户分数是否为最低分数
【发布时间】:2014-10-18 13:05:18
【问题描述】:

我有一个代表用户游戏得分的表格。用户有一个团队。我需要检查用户总游戏得分是否低于其他团队成员得分。

我的桌子

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
user 24 game_id 56和team_id 40的总分是19

所以如果我使用 user_id 24 进行查询,则不会影响任何行

【问题讨论】:

  • 在这两个用户中,你想知道谁在第 56 场比赛中得分最低吗?
  • 如果出现平局怎么办?

标签: php mysql


【解决方案1】:

要获得用户在特定团队中的游戏总分,您需要按 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 子句放在表表达式中,这样数据库要求和的行数就更少了。

【讨论】:

    【解决方案2】:

    来吧。

    这将告诉您谁在第 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;
    

    【讨论】:

      【解决方案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
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-28
        • 2016-12-23
        • 1970-01-01
        • 1970-01-01
        • 2021-01-01
        相关资源
        最近更新 更多