You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用MySQL查询每位参与游戏用户的最高得分?需处理无游戏记录用户吗?

解决方案:MySQL查询用户最高得分

这是个典型的关联表聚合查询需求,我来帮你梳理清楚两种场景的实现方式:

1. 仅查询参与过游戏的用户(符合需求描述)

如果严格按照需求“仅查询出每位参与过游戏的用户”,咱们可以用INNER JOIN关联两张表,再配合GROUP BY和MAX()聚合函数来实现:

SELECT u.fName, u.lName, MAX(g.score) AS highest_score
FROM user u
INNER JOIN game g ON u.ID = g.userID
GROUP BY u.ID, u.fName, u.lName;

代码解释:

  • INNER JOIN会自动过滤掉没有匹配游戏记录的用户(也就是Joe Smith),只保留有游戏数据的用户;
  • GROUP BY u.ID, u.fName, u.lName:按用户的唯一ID分组(避免同名用户被错误合并),同时包含姓名字段保证输出完整;
  • MAX(g.score):计算每个用户的最高得分。

执行后会得到你要的结果:

fName | lName | highest_score
Jane  | Doe   | 20
Sam   | Mills | 22

2. 是否需要考虑userID=1的Joe Smith?

这完全取决于你的业务需求:

  • 如果需求明确是只看参与过游戏的用户,那不需要额外处理,上面的SQL已经自动排除了Joe;
  • 如果业务需要把所有用户都展示出来(包括没玩过游戏的,最高得分可以显示NULL或者0),那就要用LEFT JOIN来实现:
-- 显示NULL表示无游戏记录
SELECT u.fName, u.lName, MAX(g.score) AS highest_score
FROM user u
LEFT JOIN game g ON u.ID = g.userID
GROUP BY u.ID, u.fName, u.lName;

-- 用COALESCE把NULL替换为0
SELECT u.fName, u.lName, COALESCE(MAX(g.score), 0) AS highest_score
FROM user u
LEFT JOIN game g ON u.ID = g.userID
GROUP BY u.ID, u.fName, u.lName;

这种情况下,Joe Smith的记录会被展示出来,最高得分是NULL或者0。


内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:32:21