sql >> Base de Datos >  >> RDS >> PostgreSQL

Consulta de Rails Postgres, seleccionando solo elementos que aparecen en todos los parámetros de búsqueda con asociaciones

Puede verificar para qué elementos hay un registro cada año. Puede hacerlo verificando si el número de años distintos para cada artículo es igual al total de años (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})")

También he usado BETWEEN en lugar de < y > .Creo que desea agrupar por nombre de artículo en lugar de tienda (como estaba en su consulta original).