RedShift操作顺序影响结果

时间:2018-04-10 13:28:13

标签: sql math amazon-redshift

在RedShift中,在函数内部执行乘法/除法时,操作顺序会影响结果。

select cast((52*100/100) as decimal(4,1)); -- Correctly returns 52.0
select cast((52/100*100) as decimal(4,1)); -- Incorrectly returns 0.0

我希望RedShift首先使用BEDMAS评估括号,无论是case 1: 100/100=1*52=52还是case 2: 52/100=0.52*100=52。我已尝试过其他操作以及RedShift:TRUNC,ROUND等,它们都做同样的事情。

为什么第二个会导致0.0?

1 个答案:

答案 0 :(得分:2)

一切都是正确的。 /integer division

  

/ 除法(整数除法截断结果)

select cast((52.0/100*100) as decimal(4,1));   -- making 52 as 52.0
-- 52.0

<强> DBFiddle Demo

第一种情况:

52*100/100 => 5200 / 100 => 52

第二种情况:

52/100*100 => 0 * 100 => 0