PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Rails Postgres-Abfrage, wobei nur Elemente ausgewählt werden, die in allen Suchparametern mit Assoziationen erscheinen

Sie können überprüfen, für welche Elemente es einen Datensatz für jedes Jahr gibt. Sie können dies tun, indem Sie überprüfen, ob die Anzahl der unterschiedlichen Jahre für jedes Element gleich der Gesamtzahl der Jahre ist (mithilfe von 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})")

Ich habe auch BETWEEN verwendet statt < und > .Ich denke, Sie möchten nach Artikelnamen statt nach Shop gruppieren (wie es in Ihrer ursprünglichen Abfrage der Fall war).