Просто добавьте десятичную точку:
select sum(case when name like 'H%' then 1.0 else 0 end) * 100 / count(*)
from category;
Postgres делает целочисленное деление.
Вы также можете express это используя 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;