我有一个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
的值不正确。我也尝试过使用CAST
,但它仍然会返回不正确的结果。奇怪的是,结果实际上是2*x而不是2/x的结果为什么结果不正确,为什么行消失?
最佳答案
SELECT 2/1*x "ratio" from XX
相当于
SELECT 2*1*x "ratio" from XX
因为乘法和除法是从左到右计算的。因此,第一个表达式的计算结果是
(2 / 1) * x
,而不是2 / (1 * x)
。顺便说一句:你的算法有点像整数算法,应该用浮点算法来实现,比如你最好把表达式写成
2.0 / x
。关于postgresql - Postgres除法不正确,行在WITH查询中消失,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41255662/