繁体   English   中英

查询对象,包括汇总计数数据

[英]Query object including aggregate count data

我正在尝试为管理员建立一些基本的表格,以查看用户,他们邀请了多少用户以及其中有多少用户为订阅付费。 纤细的桌子看起来像这样:

User: id, email
Referral: id, inviter_id <- (maps to user_id), paid_at (date, is either nil or set)

我遇到的问题是,我需要先汇总数据,然后进行排序,然后再进行分页,然后再将集合返回到视图。 如果可能的话,我想拥有完整的用户对象,尽管如果可能的话,我只会解决我需要的字段。

我一直在尝试重做以下内容:

User.joins(:referrals).group('users.id').count('referrals.id')

这给我返回了{ id: count }的哈希值。 paid_at IS NOT NULL时,我还如何获得结果,甚至将它们作为键值对获得? 我一直在尝试加入,但对于如何正确执行操作感到迷茫,我们将不胜感激。

编辑:

我也尝试过以下查询:

User.joins(:referrals).select('users.id, users.email, count(referrals.id)').group('users.id, users.email')

但是,我假设它仅返回id和email,因为ActiveRecord模型没有用于Referrals_count的字段。

编辑:添加了SQL

  SELECT
    users.id,
    users.email,
    COUNT(DISTINCT(r1.id)) AS referrals_count, 
    COUNT(DISTINCT(r2.id)) AS paid_referrals_count
  FROM
    users
  LEFT JOIN
    referrals AS r1 ON users.id = r1.inviter_id AND
    r1.accept_at IS NOT NULL
  LEFT JOIN
    referrals AS r2 ON r1.id = r2.id AND
    r2.paid_at IS NOT NULL
  GROUP BY
    users.id, users.email
  ORDER BY
    paid_referrals_count

我不确定上面的sql是否有效,这是我试图获取的数据的第一步。

“我假设是因为ActiveRecord模型没有用于Referrals_count的字段。” 你是对的。 在您的选择中使用AS paid_referrals_count

User.joins(:referrals).select('users.id, users.email, count(referrals.id) AS paid_referrals_count').group('users.id, users.email')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM