首页 >数据库 >mysql教程 >如何计算 SQL SELECT 查询中匹配值的百分比?

如何计算 SQL SELECT 查询中匹配值的百分比?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-27 03:49:09787浏览

How to Calculate the Percentage of Matching Values in a SQL SELECT Query?

在同一个 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;

解释:

  • = 优先于 OR 确保首先对比较进行计算。
  • count(value_a = value_b OR NULL) 确保 NULL 值忽略。
  • (count(value_a = value_b OR NULL) * 100) 除以 count(*) 计算百分比。
  • count(*) 表示总行数,包括无效的值。

结果:

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn