sql >> Databáze >  >> RDS >> PostgreSQL

Dotaz Rails Postgres s výběrem pouze položek, které se objevují ve všech parametrech vyhledávání s asociacemi

Mohli byste zkontrolovat, o jakých položkách je každý rok záznam. Můžete to udělat tak, že zkontrolujete, zda se počet jednotlivých let pro každou položku rovná součtu let (pomocí 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})")

Také jsem použil BETWEEN místo < a > .Myslím, že chcete seskupovat podle názvu položky místo obchodu (jak tomu bylo ve vašem původním dotazu).




  1. Nejlepší a optimální způsob, jak spojit maximální hodnotu z jiné tabulky

  2. Nezaškrtnuté políčko vrací hodnotu null

  3. Jak získat komentář role z databáze PostgreSQL

  4. Mysql Jak vytvoříte seskupený index?