能否用单条SQL查询合并两张玩家积分表并按昵称求和?
可以通过单条SQL查询实现该需求
前提假设
假设两张表分别名为TableA和TableB(实际使用时替换为你的真实表名即可),结构如下:
TableA
| NickName | Points |
|---|---|
| Player 1 | 15 |
| Player 2 | 8 |
TableB
| NickName | Points |
|---|---|
| Player 1 | 33 |
| Player 2 | 22 |
实现SQL
使用UNION ALL合并两张表的所有数据,再按NickName分组求和即可得到目标结果:
SELECT NickName, SUM(Points) AS Points FROM ( SELECT NickName, Points FROM TableA UNION ALL SELECT NickName, Points FROM TableB ) AS CombinedData GROUP BY NickName;
说明
UNION ALL会完整保留两张表的所有行(包括重复的用户记录),确保每个用户的所有积分都被纳入计算- 外层查询通过
GROUP BY NickName聚合同一用户的记录,SUM(Points)直接计算该用户的总积分 - 该方案兼容“某张表存在另一张表没有的用户”的场景:比如若TableA有
Player3而TableB没有,结果中会显示Player3的积分等于TableA中的对应数值
执行结果
执行上述SQL后,将得到你期望的结果:
| NickName | Points |
|---|---|
| Player 1 | 48 |
| Player 2 | 30 |
内容的提问来源于stack exchange,提问作者Andrea Piovesan
相关产品推荐
相关产品推荐

