Anda dapat memeriksa item apa yang ada catatan untuk setiap tahun. Anda dapat melakukannya dengan memeriksa apakah jumlah tahun yang berbeda untuk setiap item sama dengan total tahun (menggunakan 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})")
Saya juga telah menggunakan BETWEEN
bukannya <
dan >
.Saya pikir Anda ingin mengelompokkan berdasarkan nama item daripada toko (seperti pada kueri awal Anda).