无法使用.each block和sqlite3计算不包括当前观察值的均值

时间:2019-04-09 01:05:26

标签: sql ruby sqlite calculated-columns

我已尽力将代码精简到最低限度,并提供了有关问题的简洁说明(希望如此)

我有一个如下所示的数据库方案。

def a_method(info_hash)
     ...
     db.execute2 "create table if not exists Table1(Id INTEGER PRIMARY KEY, Item TEXT, Amount FLOAT, Type TEXT, AvgInc FLOAT, AvgX FLOAT, Total FLOAT)"
     ...
end

这将创建我的架构。填充数据库后,我将运行以下方法,该方法为我的#{@total}列分组的Type值:

def get_total(info_hash)
    ...
    get_amt =  db.execute2 "SELECT sum(Amount) from Table1 WHERE Type = :Type", info_hash[:category]
    puts "foo"
    db.execute2 "UPDATE Table1 SET Total = :Total WHERE Type = :Type", get_amt[1][0], info_hash[:category]
    @total=get_amt[1][0]
    ...
    @total
end

如果项目不存在,我想运行以下方法来计算Item平均值。基本上每个ItemType平均值的影响。

请查看代码中的注释,以了解我认为我的逻辑错误的地方

def method_excluding(info_hash) 
     ...
     get_num =  db.execute2 "SELECT Amount from Table1 WHERE Type = :Type", info_hash[:category]
    i = 0
    get_num.each do |item| 
    #purpose of block to compute an average value for Type as if #{item} did not exist.  So: the average value for Type EXLCUDING #{item}
        if i == 1
            @avgx = (@total - get_num[1][0]) / i
        elsif i > 1
            @avgx = (@total - get_num[i][0]) / (i - 1)
        end         
        i+=1
        db.execute2 "UPDATE Table1 SET AvgX = :AvgX WHERE Type = :Type", @avgx, info_hash[:category]
        ...
end

请告知我如何获得理想的结果。

0 个答案:

没有答案