You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL生成列计算结果始终为0.0,请求技术帮助

问题原因与解决办法

你的问题出在整数除法上:如果cmp_pass和att_pass都是整数类型,PostgreSQL会执行整数除法——结果直接截断小数部分。比如3/5会得到0,再乘以100还是0,最终转成DECIMAL(4,1)就是0.0。

修复方案

只需确保运算过程中触发小数除法,有几种简单的修改方式:

方式1:用100.0替代100

把整数100改成浮点型的100.0,强制整个表达式按小数运算:

ALTER TABLE passing 
ADD COLUMN pass_completion DECIMAL(4,1) 
GENERATED ALWAYS AS (cmp_pass / coalesce(nullif(att_pass,0),1) * 100.0) STORED;

方式2:显式转换列类型为DECIMAL

把被除数cmp_pass转成DECIMAL,确保除法是小数运算:

ALTER TABLE passing 
ADD COLUMN pass_completion DECIMAL(4,1) 
GENERATED ALWAYS AS (cmp_pass::DECIMAL / coalesce(nullif(att_pass,0),1) * 100) STORED;

方式3:转换除数为DECIMAL

也可以把coalesce里的默认值改成小数,同样能触发小数除法:

ALTER TABLE passing 
ADD COLUMN pass_completion DECIMAL(4,1) 
GENERATED ALWAYS AS (cmp_pass / coalesce(nullif(att_pass,0)::DECIMAL, 1.0) * 100) STORED;

任选一种修改后,生成列就能正确计算出百分比了。

内容的提问来源于stack exchange,提问作者am1234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 15:42:36