如何利用两个独立表的查询结果计算总成本与用户数的比值?
计算总成本除以用户数的SQL实现
方法一:子查询直接计算
直接将两个聚合查询作为子查询,在主查询中执行除法运算:
SELECT (SELECT SUM(costs) FROM costs) / (SELECT COUNT(DISTINCT user_id) FROM users) AS cost_per_user;
cost_per_user是结果的别名,代表每个用户的平均成本,写法简洁直接。
方法二:交叉连接(CROSS JOIN)合并结果
先分别计算用户数和总成本,再通过交叉连接合并单行结果后做除法:
SELECT c.total_cost / u.user_count AS cost_per_user FROM (SELECT COUNT(DISTINCT user_id) AS user_count FROM users) u CROSS JOIN (SELECT SUM(costs) AS total_cost FROM costs) c;
这种方式结构更清晰,后续如果需要添加其他聚合指标,扩展起来更方便。
处理除数为0的情况
如果users表可能没有用户(用户数为0),直接除法会触发错误,可用NULLIF函数处理,当用户数为0时返回NULL:
-- 子查询写法 SELECT (SELECT SUM(costs) FROM costs) / NULLIF((SELECT COUNT(DISTINCT user_id) FROM users), 0) AS cost_per_user; -- 交叉连接写法 SELECT c.total_cost / NULLIF(u.user_count, 0) AS cost_per_user FROM (SELECT COUNT(DISTINCT user_id) AS user_count FROM users) u CROSS JOIN (SELECT SUM(costs) AS total_cost FROM costs) c;
内容的提问来源于stack exchange,提问作者Sergey K
相关产品推荐
相关产品推荐

