sql >> Databasteknik >  >> RDS >> PostgreSQL

Rails Postgres-fråga, väljer endast objekt som visas i alla sökparametrar med associationer

Du kan kontrollera vilka artiklar det finns rekord för varje år. Du kan göra det genom att kontrollera om antalet distinkta år för varje artikel är lika med det totala antalet år (med 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})")

Jag har också använt BETWEEN istället för < och > .Jag tror att du vill gruppera efter artikelnamn istället för butik (som det var i din ursprungliga fråga).




  1. Ytterligare en anledning att undvika sp_updatestats

  2. Hämta värdena för de senaste 6 månaderna i mysql

  3. konstiga karaktärer som ‪ ‬ ‏

  4. Hur Asin() fungerar i PostgreSQL