sql >> Database >  >> RDS >> PostgreSQL

Rails Postgres-query, waarbij alleen items worden geselecteerd die in alle zoekparameters met associaties verschijnen

Je zou kunnen controleren voor welke items er elk jaar een record is. U kunt dat doen door te controleren of het aantal verschillende jaren voor elk item gelijk is aan het totaal van jaren (met behulp van 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})")

Ik heb ook BETWEEN . gebruikt in plaats van < en > .Ik denk dat je wilt groeperen op itemnaam in plaats van op winkel (zoals in je oorspronkelijke zoekopdracht).




  1. Waar is de veiligste plaats om MySQL-verbindingsdetails voor PHP te plaatsen?

  2. Alternatieve Oracle-stuurprogramma's voor .net

  3. WordPress MediaWiki-integratie

  4. mysql Meerdere buitenlandse sleutels in een tabel naar dezelfde primaire sleutel