首页 >数据库 >mysql教程 >如何在单个 SQL SELECT 语句中通过 COUNT() 有效计算百分比?

如何在单个 SQL SELECT 语句中通过 COUNT() 有效计算百分比?

Barbara Streisand
Barbara Streisand原创
2025-01-03 20:15:40391浏览

How Can I Efficiently Calculate Percentages from a COUNT() in a Single SQL SELECT Statement?

在 SQL 中的同一 SELECT 语句中通过 SUM() 计算百分比

在具有整数字段 value_a 和 value_b 的表 my_obj 的上下文中,可以计算 value_a 等于 value_b 的行的百分比。初始查询尝试使用存储过程来实现此目的,但遇到了错误。

简化且更高效的解决方案

更简单、更快的方法如下:

SELECT property_name
      ,(count(value_a = value_b OR NULL) * 100) / count(*) AS pct
FROM   my_obj
GROUP  BY 1;

此查询:

  • 计算分子通过使用表达式 count(value_a = value_b OR NULL) 计算 value_a 等于 value_b 的行数来计算百分比。 OR NULL 确保在相等比较中 NULL 值被视为 FALSE。
  • 使用 count(*) 计算百分比的分母,这会计算所有行,包括具有 NULL 值的行。
  • 将分子除以分母以获得百分比并将其分配给别名pct.

处理 NULL 值

此解决方案可以正确处理 NULL 值,这与原始查询不同,原始查询可能会导致不正确的结果或被零除错误.

保留小数数字

要在结果中保留小数位,请按如下方式修改查询:

SELECT property_name
      ,round((count(value_a = value_b OR NULL) * 100.0) / count(*), 2) AS pct
FROM   my_obj
GROUP  BY 1;

此更改将分子乘以 100.0 以强制数字精度,然后使用 round()指定小数位数

结论

通过使用简化查询或保留小数的修改查询,可以在同一 SELECT 语句中有效地从 SUM() 计算百分比,处理适当的 NULL 值。

以上是如何在单个 SQL SELECT 语句中通过 COUNT() 有效计算百分比?的详细内容。更多信息请关注PHP中文网其他相关文章!

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