使用关联聚合执行查询

时间:2017-03-04 12:01:11

标签: sql ruby-on-rails activerecord arel

我有两个有关联的模型,比如说:

class Visit
 # column names: made_purchases, purchase_amount
 has_many :payments
end

class Payment
 # column names: amount
 belongs_to :visit
end

现在,我想对以下任何一个匹配的所有访问执行查询:

1. made_purchases is true
OR
2. purchase_amount is not null
OR
3. has any associated payments

我尝试创建一个子查询来计算付款次数,并尝试将其与我的WHERE查询一起使用,但我不能在WHERE上使用汇总函数,我可以使用的其他选项本来是HAVING但我不确定在这种情况下该怎么办

我正在寻找可以使用ActiveRecord或Arel组合轻松完成的查询,基本上可以执行以下操作:

的伪代码:

WHERE visits.made_purchases = true OR visits.purchase_amount is NOT NULL OR HAVING COUNT(*) of payments > 0

1 个答案:

答案 0 :(得分:0)

我发现即使HAVING子句对群组有用,您仍然可以添加行过滤器并获得所需的结果。

在这里,我最终得到了:

Visits.having("(SELECT COUNT(*) FROM payments WHERE payments.visit_id= visits.id)  > 0 OR visits.made_purchases= true OR (visits.purchase_amount IS NOT NULL AND visits.purchase_amount != '')")