查找满足条件但不四舍五入的行的百分比

时间:2020-03-23 18:21:00

标签: sql postgresql group-by count sum

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

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

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

3 个答案:

答案 0 :(得分:1)

只需添加一个小数点:

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;

答案 1 :(得分:0)

您需要一个十进制值,否则,由于分子和分母都是整数,因此Postgres会进行整数除。

但是在这里,我只使用avg()-您不需要整数值:

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

答案 2 :(得分:0)

您正在执行integer division,因此省略了小数点后的所有内容。如果您使用浮点文字100.0,则应该可以:

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