为什么postgres计算错误百分比(基于列结果)

时间:2016-12-12 13:37:20

标签: ruby-on-rails ruby postgresql

我试图获得两列之间的折扣百分比,我解决的第一个问题是其他列可能是0或null, 现在,当我计算它时,它总是给我100或0作为列'折扣'

的结果
Product.active.select("*, 100-(price/(
(CASE WHEN(market_price IS NULL OR market_price = 0)
THEN price ELSE market_price END)))*100 
AS discount")

所有结果均为0或100:\

尝试用子功能解决但仍然给了我相同的错误百分比。

1 个答案:

答案 0 :(得分:1)

好的,在进入psql控制台后,我发现有人priceoriginal_priceinteger而不是numeric,这导致了糟糕的四舍五入。

通过将列类型声明为数字来解决:

Product.active.select("*, (100 - ((price::numeric / 
(CASE WHEN(market_price IS NULL OR market_price = 0) 
THEN price ELSE market_price END)::numeric)*100.0))
AS discount")