PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Requête Rails Postgres, en sélectionnant uniquement les éléments qui apparaissent dans tous les paramètres de recherche avec des associations

Vous pouvez vérifier pour quels articles il existe un enregistrement chaque année. Vous pouvez le faire en vérifiant si le nombre d'années distinctes pour chaque élément est égal au total des années (en utilisant 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})")

J'ai aussi utilisé BETWEEN au lieu de < et > .Je pense que vous souhaitez regrouper par nom d'article au lieu de boutique (comme c'était le cas dans votre requête d'origine).