我试图获得两列之间的折扣百分比,我解决的第一个问题是其他列可能是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:\
尝试用子功能解决但仍然给了我相同的错误百分比。
答案 0 :(得分:1)
好的,在进入psql控制台后,我发现有人price
和original_price
是integer
而不是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")