PostgreSQL表达式计算不正确

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)/

当我使用表达式时((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)/ ((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)