Я приложил все усилия, чтобы сократить код до минимума и предоставил краткое объяснение проблемы (я надеюсь)
У меня есть схема БД, как указано ниже.
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
в случае, если элемент не существует.В основном влияние каждого Item
в среднем составляет Type
.
Пожалуйста, см. В кодовом комментарии, где я думаю, что моя логика неверна
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
Пожалуйста, сообщите, как мне достичь желаемого результата.