MySQL中基于同一列不同键值的除法运算实现
计算喜欢苹果的人数占总人数的比例
很简单,你可以把这两个聚合结果合并到一个SQL语句里直接计算比例,这里给你两种实用的写法:
方式一:子查询实现(直观易懂)
把两个SUM查询分别作为子查询,直接做除法运算即可:
SELECT (SELECT SUM(meta_value) FROM tbl WHERE meta_key = 55) / (SELECT SUM(meta_value) FROM tbl WHERE meta_key = 75) AS apple_preference_ratio;
⚠️ 注意:如果总人数(meta_key=75的求和结果)为0,会触发除以零的错误,所以可以加个判断避免异常:
SELECT CASE WHEN (SELECT SUM(meta_value) FROM tbl WHERE meta_key = 75) = 0 THEN 0 ELSE (SELECT SUM(meta_value) FROM tbl WHERE meta_key = 55) / (SELECT SUM(meta_value) FROM tbl WHERE meta_key = 75) END AS apple_preference_ratio;
方式二:条件聚合实现(性能更优)
这种方式只需要扫描一次数据表,比子查询更高效,适合数据量较大的场景:
SELECT SUM(CASE WHEN meta_key = 55 THEN meta_value ELSE 0 END) / SUM(CASE WHEN meta_key = 75 THEN meta_value ELSE 0 END) AS apple_preference_ratio;
同样加上除以零的防护逻辑:
SELECT CASE WHEN SUM(CASE WHEN meta_key = 75 THEN meta_value ELSE 0 END) = 0 THEN 0 ELSE SUM(CASE WHEN meta_key = 55 THEN meta_value ELSE 0 END) / SUM(CASE WHEN meta_key = 75 THEN meta_value ELSE 0 END) END AS apple_preference_ratio;
额外提示
如果需要输出百分比格式,只需要把结果乘以100即可,比如:
SELECT CASE WHEN SUM(CASE WHEN meta_key = 75 THEN meta_value ELSE 0 END) = 0 THEN 0 ELSE SUM(CASE WHEN meta_key = 55 THEN meta_value ELSE 0 END) / SUM(CASE WHEN meta_key = 75 THEN meta_value ELSE 0 END) * 100 END AS apple_preference_percentage;
内容的提问来源于stack exchange,提问作者TPup
相关产品推荐
相关产品推荐

