Bạn có thể kiểm tra những mục nào có hồ sơ hàng năm. Bạn có thể làm điều đó bằng cách kiểm tra xem số năm riêng biệt cho mỗi mục có bằng tổng số năm hay không (sử dụng COUNT DISTINCT
):
number_years = params[:end_year].to_i - params[:start_year].to_i + 1
@sale_averages = Sale.joins(:shops, :items)
.select('items.name, AVG(sale.price) as price')
.where("EXTRACT(year from season_year) BETWEEN #{params[:start_year]} AND #{params[:end_year]}")
.where('shops.name': params[:select_shop])
.group('items.name')
.having("(COUNT(DISTINCT(EXTRACT(year from season_year))) = #{number_years})")
Tôi cũng đã sử dụng BETWEEN
thay vì <
và >
. Tôi nghĩ bạn muốn nhóm theo tên mặt hàng thay vì cửa hàng (như trong truy vấn ban đầu của bạn).