PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Query Rails Postgres, selezionando solo gli elementi che appaiono in tutti i parametri di ricerca con associazioni

Puoi controllare per quali articoli c'è un record per ogni anno. Puoi farlo controllando se il numero di anni distinti per ogni articolo è uguale al totale degli anni (usando 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})")

Ho anche usato BETWEEN invece di < e > .Penso che tu voglia raggruppare per nome dell'articolo anziché per negozio (come era nella tua query originale).