sql >> Database teknologi >  >> RDS >> PostgreSQL

Rails Postgres-forespørgsel, der kun vælger elementer, der vises i alle søgeparametre med tilknytninger

Du kan tjekke, hvilke varer der er rekord for hvert år. Du kan gøre det ved at kontrollere, om antallet af forskellige år for hver vare er lig med det samlede antal år (ved at bruge 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})")

Jeg har også brugt BETWEEN i stedet for < og > .Jeg tror, ​​du vil gruppere efter varenavn i stedet for butik (som det var i din oprindelige forespørgsel).




  1. Ekkolodsanalyse tager lang tid

  2. SQL Server:To-niveau GROUP BY med XML-output

  3. MySQL:finde dubletter på tværs af flere felter

  4. Hvordan laver man trigger, der implementerer denne betingelse?