sql - 查找满足条件而不进行舍入的行的百分比
问题描述
我试图找到满足特定条件的行的百分比。我的查询很接近,但答案总是四舍五入到最接近的整数。
例如,下面的这个查询返回 6,但它应该返回 6.25。意味着 6.25% 的行满足该条件。我该怎么做?
select sum(case when name like 'H%' then 1 else 0 end) * 100 / count(*)
from category
解决方案
只需添加一个小数点:
select sum(case when name like 'H%' then 1.0 else 0 end) * 100 / count(*)
from category;
Postgres 进行整数除法。
您也可以使用以下方式表达这一点avg()
:
select avg(case when name like 'H%' then 100.0 else 0 end)
from category;
不需要小数点。尽管 Postgres 对整数进行整数除法,但它使用小数点计算整数的平均值。
这可以更简单地说(假设name
不是NULL
):
select avg( (name like 'H%')::int ) * 100
from category;
推荐阅读
- django - Django validate_unique 限制更新/补丁
- javascript - AJAX 调用服务器但 POST 失败 (PHP)
- php - 推送通知 API 输出作为 message_id
- virtual-machine - 如果两者都是虚拟机管理程序,如何在 kvm 而不是 xen 上设置 Virtual Box?
- java - java.lang.ClassNotFoundException:org.springframework.web.servlet.view.InternalResourseViewResolver
- intellij-idea - Intellij 是否有设置选项或插件来折叠尾随右括号?
- python - Python 不让我在获得平均分时只打印一次
- javascript - 获取css调整大小元素的值
- c# - C#如何检索任何PC/笔记本电脑上的所有用户名
- android - 连接到多个 BLE 设备时 onCharacteristicRead 错误 129