gpt4 book ai didi

ruby-on-rails - 有没有办法使用 postgresql 函数来计算 Rails 中的加权平均值?

转载 作者:行者123 更新时间:2023-11-29 11:59:43 25 4
gpt4 key购买 nike

要按公司的市场容量计算加权平均值,我有这样的方法:

class Company < ActiveRecord::Base
def self.weighted_average(column)
market_cap_sum = sum(:market_cap)
array = []
find_each do |company|
next if company.send(column).nil?
next if company.market_cap.nil?
array << (company.market_cap.to_d/market_cap_sum) * company.send(column)
end
array.sum
end
end

此代码运行良好,但计算速度较慢。如果有一种方法可以通过 postgresql 函数计算,我想使用它。

要计算标准偏差,有一个这样的函数,但我找不到如何用加权平均值计算标准偏差。

Company.select('stddev_pop(price) as stddev')

有没有可能做我想做的事?

最佳答案

这种方法中的数学似乎并不为人所知。享受这个老程序员的把戏吧。

CREATE TABLE data (
w real, /* Weight. May be an integer count or other weight. */
v real); /* Value. The value v is to be weighted by w. */

用一个值“1”的副本和十个值“10”的副本填充表:

insert into data values(1, 1);
insert into data values(10, 2);

然后运行以下查询以获得加权统计值:

SELECT
min(v),
sum(w*v)/sum(w) AS wavg,
max(v),
sqrt((sum(w*v^2)-(sum(w*v)^2)/sum(w))/(sum(w)-1)) AS wstdev
FROM data;

结果是:

 min |  wavg   | max |      wstdev       
-----+---------+-----+-------------------
1 | 1.90909 | 2 | 0.301511344577763
(1 row)

关于ruby-on-rails - 有没有办法使用 postgresql 函数来计算 Rails 中的加权平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31021895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com