合并SQL查询实现两列求和以优化代码效率
合并两次查询实现用户关联数据求和的SQL方案
没问题,咱们可以直接用一个带聚合函数的SQL查询把两次操作合并起来,彻底避免循环遍历+多次查询的低效模式,直接一次性拿到每个用户的关联数据求和结果。
最终SQL查询
SELECT u.id, -- 对关联用户的两列分别求和后相加,COALESCE处理NULL值避免求和出错 SUM(COALESCE(related.add_col_1, 0)) + SUM(COALESCE(related.add_col_2, 0)) AS total_sum FROM users u -- 关联所有ref等于当前用户id的记录 LEFT JOIN users related ON related.ref = u.id -- 按主用户id分组,确保每个用户对应一行求和结果 GROUP BY u.id;
关键细节说明
- LEFT JOIN的作用:保证即使某个用户没有任何关联数据(没有ref等于其id的记录),也会在结果中保留该用户的id,求和结果为0。如果只需要保留有关联数据的用户,把
LEFT JOIN换成INNER JOIN即可。 - COALESCE函数:处理可能的NULL值——如果关联用户的
add_col_1或add_col_2为NULL,用0替代,避免SUM(NULL)得到NULL的情况。 - 聚合与分组:通过
SUM()完成列的求和,GROUP BY u.id确保每个用户的关联数据被汇总到一行结果中。
如果你的需求是直接获取所有用户关联数据的总合(而非每个用户单独的求和),可以简化成下面的查询:
SELECT SUM(COALESCE(add_col_1, 0)) + SUM(COALESCE(add_col_2, 0)) AS overall_total FROM users WHERE ref IN (SELECT id FROM users);
内容的提问来源于stack exchange,提问作者Jack Hales
相关产品推荐
相关产品推荐

