在同一个 SELECT 查询中通过 SUM() 计算百分比
在 my_obj 表中,其中存在整数字段 value_a 和 value_b,目标是确定 value_a 等于的次数百分比value_b。
不正确的尝试:
select sum(case when o.value_a = o.value_b then 1 else 0 end) as nb_ok, sum(case when o.value_a != o.value_b then 1 else 0 end) as nb_not_ok, compute_percent(nb_ok,nb_not_ok) from my_obj as o group by o.property_name;
此方法失败,因为查询中不存在 nb_ok 列。
已优化解决方案:
SELECT property_name ,(count(value_a = value_b OR NULL) * 100) / count(*) AS pct FROM my_obj GROUP BY 1;
解释:
结果:
property_name | pct --------------+---- prop_1 | 17 prop_2 | 43
小数数字的替代方案:
SELECT property_name ,round((count(value_a = value_b OR NULL) * 100.0) / count(*), 2) AS pct FROM my_obj GROUP BY 1;
此变体引入小数位以保留小数位。
以上是如何计算 SQL SELECT 查询中匹配值的百分比?的详细内容。更多信息请关注PHP中文网其他相关文章!