iro*_*and 10 sql postgresql ruby-on-rails
我有这样的方法:
def self.weighted_average(column)
sql = "SUM(#{column} * market_cap) / SUM(market_cap) as weighted_average"
Company.select(sql).to_a.first.weighted_average
end
Run Code Online (Sandbox Code Playgroud)
当列是a时decimal,它会返回一个没有问题的值.但是当列是integer,该方法最终会PG::NumericValueOutOfRange出错.
我应该改变列的类型integer来decimal,还是有一种方式来获得的结果sum不改变列的类型?
您可以将值转换为始终为十进制值,因此无需更改列类型:
sql = "SUM(#{column} * CAST(market_cap as decimal(53,8))) / SUM(CAST(market_cap as decimal(53,8))) as weighted_average"
Run Code Online (Sandbox Code Playgroud)
PS 我会改变列类型 - 那么它是一致的。
| 归档时间: |
|
| 查看次数: |
1084 次 |
| 最近记录: |