PostgreSQL表达式计算不正确
当我使用表达式时((x.am1998-x.am1999)/((x.am1998+x.am1999)/2)) 但输出结果是零?为什么会这样 但是个人回答 (x.am1998-x.am1999),(x.am1998+x.am1999)/2)是否正确显示PostgreSQL表达式计算不正确,sql,postgresql,datetime,sum,Sql,Postgresql,Datetime,Sum,当我使用表达式时((x.am1998-x.am1999)/((x.am1998+x.am1999)/2)) 但输出结果是零?为什么会这样 但是个人回答 (x.am1998-x.am1999),(x.am1998+x.am1999)/2)是否正确显示 非常感谢您的帮助/这是整数除法。除法的两个操作数都是(大概!)整数,因此Postgres返回整数结果。通常,3/4是0,而不是0.75 可以通过将其中一个操作数转换为十进制来解决此问题。例如: select ((x.am1998-x.am1999)/
非常感谢您的帮助/这是整数除法。除法的两个操作数都是(大概!)整数,因此Postgres返回整数结果。通常,
3/4
是0
,而不是0.75
可以通过将其中一个操作数转换为十进制来解决此问题。例如:
select ((x.am1998-x.am1999)/ ((x.am1998+x.am1999)/2)) as answer from
(select (sum(amount) FILTER(where EXTRACT(YEAR FROM order_date)=1998)) as am1998,
(sum(amount) FILTER(where EXTRACT(YEAR FROM order_date)=1999)) as am1999 from orders) x;
number | order_date | sid | cust_id | amount
--------+------------+-----+---------+--------
10 | 1996-08-02 | 2 | 4 | 540
20 | 1999-01-20 | 8 | 4 | 1800
30 | 1995-07-14 | 1 | 9 | 460
40 | 1998-01-29 | 2 | 7 | 2400
50 | 1998-02-03 | 7 | 6 | 600
60 | 1998-03-02 | 7 | 6 | 720
70 | 1998-05-06 | 7 | 9 | 150
注意:您标记了Postgres和MySQL。前者进行整数除法,而不是后者-因此这必须是Postgres。用您真正使用的数据库标记您的问题。我删除了不一致的数据库标记。
(x.am1998 - x.am1999)/ ((x.am1998 + x.am1999) / 2.0)