Ruby on rails Rails、Postgres仅显示所有搜索参数中的项目

Ruby on rails Rails、Postgres仅显示所有搜索参数中的项目,ruby-on-rails,postgresql,ruby-on-rails-5,Ruby On Rails,Postgresql,Ruby On Rails 5,如果某个商店在某几年之间有销售记录,我只想抓取销售记录。我如何最好地实现此搜索 例如,用户选择2013年开始年份和2016年结束年份以及店铺名称。该店选择出售香蕉和苹果,但该店仅在2013年、2014年和2016年出售苹果。我希望我的结果只显示香蕉的平均销量,因为苹果在2015年没有售出 到目前为止,我有以下疑问: @sale_averages = Sale.joins(:shops, :items).where('extract(year from season_year) < ? AN

如果某个商店在某几年之间有销售记录,我只想抓取销售记录。我如何最好地实现此搜索

例如,用户选择2013年开始年份和2016年结束年份以及店铺名称。该店选择出售香蕉和苹果,但该店仅在2013年、2014年和2016年出售苹果。我希望我的结果只显示香蕉的平均销量,因为苹果在2015年没有售出

到目前为止,我有以下疑问:

@sale_averages = Sale.joins(:shops, :items).where('extract(year from season_year) < ? AND extract(year from season_year) > ? ', params[:start_year], params[:end_year])
.where('shops.name = ?', params[:select_shop])
.select('items.name, AVG(sale.price) as price').group('shop.name')

我在这里没有安装postgres,因此可能需要一些更正,但这里的基本想法(至少是我的基本想法)是生成一个年份列表,选择其中一个年份中的所有项目,然后比较计数:

WITH years AS (
  SELECT * FROM generate_series(start_year,end_year);
)

SELECT  years, COUNT(items.id) AS item_count 
WHERE items.season_year IN years GROUP_BY(item.id)
HAVING COUNT(years) = item_count

谢谢医生,我已经在上面添加了我的模式。季节年仅出现在销售中,因此我无法调用项目。季节年。我的回答也只是演示一种可能的解决方案。当然,它可能需要另一个连接,但重要的部分是:1。生成一个系列,2。选择本系列销售的所有商品,3。比较一下这个系列的大小和项目列表。无论谁否决了这个,我都很高兴知道为什么,这样我就可以学到一些东西。答案比重复的问题早得多。答案使用了与公认答案相同的原则。它不提供现成的代码,但这是完全可以接受的这个网站。这是对这个问题的第一个答案,并且给了op足够的钱来解决剩下的问题。对不起,安娜。没有区别。一旦悬赏结束,我会删除这个,因为我已经接受了你对另一个的回答。干杯
WITH years AS (
  SELECT * FROM generate_series(start_year,end_year);
)

SELECT  years, COUNT(items.id) AS item_count 
WHERE items.season_year IN years GROUP_BY(item.id)
HAVING COUNT(years) = item_count