我正在寻找基于一些用户选择参数创建一个 Postgres 查询。
用户将选择商店以及开始和结束年份。提交后,我只想显示仅存在于所选所有年份的商品的平均价格。
例如,用户选择开始日期为 2014 年,结束日期为 2018 年。项目香蕉在所有这些年份都有特征,但苹果仅在 2014 年、2015 年和 2017 年有特征。所以我的最终结果将只显示香蕉的平均价格,而不显示香蕉的平均价格。苹果。
到目前为止,这是我开发的查询。我不确定如何最好地实现仅对所有搜索年份中出现的项目进行平均的部分。
@sale_averages = Sale.joins(:shops, :items).where('extract(year from season_year) < ? AND extract(year from season_year) > ? ', params[:start_year], params[:end_year])
.where('shops.name = ?', params[:select_shop])
.select('items.name, AVG(sale.price) as price').group('shop.name')
Schema
create_table "items", force: :cascade do |t|
t.string "name"
end
create_table "sales", force: :cascade do |t|
t.integer "shop_id"
t.integer "item_id"
t.date "season_year"
t.decimal "price"
end
create_table "shops", force: :cascade do |t|
t.string "name"
end