rails/sql—如何按组中的不同值进行筛选

6rqinv9w  于 2021-07-27  发布在  Java
关注(0)|答案(2)|浏览(315)

我在rails中工作,但是sql中的答案同样有用。假设我有一个用户表和一个购买表。我想找到只购买过商品a的用户。我希望使用一个大致如下的查询: User.joins(:purchases).group(:id).having("DISTINCT(item) = 'A'").pluck(:id) 这是我需要回答的问题的简化,但这个分组问题是我的主要障碍。出于这个原因,我希望得到一个逻辑上非常相似的答案,因为其他解决方法可能不适用。

ebdffaop

ebdffaop1#

这在rails中有效吗?

User.joins(:purchases).group(:id).having("MIN(item) = MAX(item) AND MIN(item) = 'A'").pluck(:id)

这个短语是:只有一个不同的值(因为 MIN() 以及 MAX() 是平等的) 'A' .
或者:

having("MAX(CASE WHEN item <> 'A' THEN 1 ELSE 0 END) = 0")

代表:没有其他价值 'A' .

dxxyhpgq

dxxyhpgq2#

having 只能使用聚合函数(例如。 having count(id) > 2 )或列上的表达式,例如。 having("id > 1") .
因此,根据您的数据库,您可以尝试找到一个聚合函数,该函数根据id标识分组中是否存在项

...
GROUP BY id
HAVING 'A' = ANY(ARRAY_AGG(item))

相关问题