У меня есть поисковый запрос (с использованием Postgres), который использует несколько поисковых параметров и собирает среднюю доходность обработок.Проблема, с которой я сталкиваюсь, заключается в том, что среднее количество обработок одинаково для обоих результатов, что неверно.Я не уверен, где я ошибаюсь с этим запросом, но он собирает среднее для всех и выводит один и тот же результат для каждой обработки:
@search = Trial.joins(:region, :property, :quality_datum, treatment_selections: :treatment)
.where("EXTRACT(year from season_year) BETWEEN #{params[:start_year]} AND #{params[:end_year]}")
.where('regions.name': params[:select_region]).where('properties.name': params[:select_property])
.group('treatments.id')
.select('treatments.name, AVG(quality_data.yield) as yield')
Какие выходные данные:
| Name | Average |
| Treatment 1 | 8.68 |
| Treatment 2 | 8.68 |
Что не так, должно быть:
| Name | Average |
| Treatment 1 | 9.27 |
| Treatment 2 | 7.25 |
Числа Quality_data.yield:
Обработка 1: 9.86, 9.79, 8.16, которыесреднее значение должно = 9,27
Обработка 2: 10,01, 4,89, 6,85, что среднее значение должно = 7,25
Результат запроса:
SELECT treatments.name, AVG(quality_data.yield) as yield FROM "trials"
INNER JOIN "regions" ON "regions"."id" = "trials"."region_id"
INNER JOIN "properties" ON "properties"."id" = "trials"."property_id"
INNER JOIN "treatment_selections" ON "treatment_selections"."trial_id" = "trials"."id"
INNER JOIN "quality_data" ON "quality_data"."treatment_selection_id" = "treatment_selections"."id"
INNER JOIN "treatment_selections" "treatment_selections_trials" ON "treatment_selections_trials"."trial_id" = "trials"."id"
INNER JOIN "treatments" ON "treatments"."id" = "treatment_selections_trials"."treatment_id" WHERE (EXTRACT(year from season_year) BETWEEN 2016 AND 2018) AND "regions"."name" = $1 AND "properties"."name" = $2 GROUP BY treatments.id
Ассоциации
class Trial
belongs_to :region
belongs_to :property
has_many :treatment_selections, dependent: :destroy
has_many :quality_datum, through: :treatment_selections
end
class TreatmentSelection < ApplicationRecord
belongs_to :trial
belongs_to :treatment
has_many :quality_datum, dependent: :destroy
end
class Treatment < ApplicationRecord
has_many :treatment_selections
end
class Region < ApplicationRecord
has_many :trials
end
class Property < ApplicationRecord
has_many :trials
end