如何对游戏分数库中UNION查询返回的单列数值求和?
没问题,这个需求其实很容易实现——核心思路就是把你的UNION查询当成一个子查询,在外层用SUM()函数直接对这个子查询返回的单列数值求和就行。
结合你的游戏分数表(我先假设表名叫tournaments,如果实际表名不一样你替换一下),给你举两个实用的例子:
例子1:统计某个玩家的总得分
比如你要算ID为81的玩家,不管他是黑方还是白方的所有得分总和:
SELECT SUM(player_score) AS total_score_for_player_81 FROM ( -- 取出81作为黑方的得分 SELECT Black_Score AS player_score FROM tournaments WHERE Black_ID = 81 UNION ALL -- 取出81作为白方的得分 SELECT White_Score AS player_score FROM tournaments WHERE White_ID = 81 ) AS combined_player_scores
例子2:统计所有玩家的总分数总和
如果要把表里所有的Black_Score和White_Score全部加起来:
SELECT SUM(all_scores) AS total_overall_scores FROM ( SELECT Black_Score AS all_scores FROM tournaments UNION ALL SELECT White_Score AS all_scores FROM tournaments ) AS all_combined_scores
关键注意点
- 一定要用
UNION ALL而不是UNION:UNION会自动去重,如果你用它的话,相同分数的记录会被合并,导致求和结果比实际少。只有当你明确需要去掉重复值的时候才用UNION。 - 子查询必须加别名:几乎所有数据库都要求子查询有一个别名(比如上面的
combined_player_scores),否则外层查询无法识别它。
内容的提问来源于stack exchange,提问作者Home Boy
相关产品推荐
相关产品推荐

