Postgres除法不正确,行在WITH查询中消失

时间:2016-12-21 05:22:08

标签: postgresql

我有一个browser.driver.method查询,我希望可以理解它的简洁性,我已经将其归结为问题所在:

WITH AS

然后我稍后在查询中使用它

WITH XX AS (
   SELECT ....,
   floor(GREATEST(value*-1, value2) * (value4*value5/value) * -1 * 100)/100 as x,
   ....
)

这是一大堆行消失的地方,

现在,如果我这样做:

SELECT 1/x as "ratio" from XX

也很奇怪,这会返回相同的结果:

SELECT 2/1*x "ratio" from XX

行返回但SELECT 2*1*x "ratio" from XX 的值不正确。我还试图使用ratio,但仍会返回错误的结果。奇怪的是,结果实际上是2 * x而不是2 / x

的结果

为什么结果不正确,为什么行会消失?

1 个答案:

答案 0 :(得分:2)

SELECT 2/1*x "ratio" from XX

相当于

SELECT 2*1*x "ratio" from XX

因为乘法和分数从左到右进行评估。因此,第一个表达式评估为(2 / 1) * x,而不是2 / (1 * x)

顺便说一句:你的算术闻起来像整数算术,它应该像浮子算法一样,例如:你最好把表达式写成2.0 / x