PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Consulta Rails Postgres, selecionando apenas os itens que aparecem em todos os parâmetros de pesquisa com associações


Você pode verificar quais itens há um registro para cada ano. Você pode fazer isso verificando se o número de anos distintos para cada item é igual ao total de anos (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})")

Eu também usei BETWEEN em vez de < e > .Acho que você quer agrupar por nome de item em vez de loja (como estava na sua consulta original).