Вместо этого используйте это выражение:
SUM(signup_flow) * 100.0 / COUNT(signup_flow) AS rate
Как и @ Ричард предложил , ваша проблема целочисленное деление , где дробные цифры усекаются.Руководство:
/
... деление (целочисленное деление усекает результат)
Это портит удовольствие, когда все, что вы получите, это дробные цифры.
Умножение на 100
до того, как деление только "помогает", если оно увеличивает rate
до 1 или более.(Это все еще целочисленное деление.) Умножение на 100.0
делает свое дело, потому что числовая константа с дробной цифрой считается типом numeric
, тогда как числовая константа, состоящая только из цифр (и маленькихдостаточно) предполагается тип integer
.
В качестве альтернативы приведите хотя бы одно задействованное число к явному значению float
или numeric
, что приводит к нецелочисленному типу для всего вычисления.
Возможно, вы захотите round()
вашего результата до заданного числа дробных цифр (работает для numeric
):
round(SUM(signup_flow) * 100.0 / COUNT(signup_flow), 2) AS rate
Связано (с дополнительными пояснениями и ссылками):