Postgres дает неверный результат для деления, когда знаменатель больше, чем числитель.
select 2/4 дает 0, select 4/2 работает правильно.
select 2/4
select 4/2
Но select 2/4 должен на самом деле вернуть 0,5 но он возвращает 0 как целое число
Postgres делает целочисленное деление на целые числа. По иронии судьбы, он не делает целочисленные средние на avg(), но это совсем другое дело.
avg()
Одним из решений является просто преобразование одного значения в numeric:
numeric
select 2/4, 2::numeric/4
Postgres добавит десятичные разряды для чисел.
Попробуйте деление с плавающей запятой, как в:
select 2.0 / 4 -- shows 0.5
Или:
select 1.0 * 2 / 4 -- shows 0.5