首页 > 解决方案 > 查找满足条件而不进行舍入的行的百分比

问题描述

我试图找到满足特定条件的行的百分比。我的查询很接近,但答案总是四舍五入到最接近的整数。

例如,下面的这个查询返回 6,但它应该返回 6.25。意味着 6.25% 的行满足该条件。我该怎么做?

select sum(case when name like 'H%' then 1 else 0 end) * 100 / count(*)
from category

标签: sqlpostgresqlgroup-bycountsum

解决方案


只需添加一个小数点:

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;

推荐阅读