使用ActiveRecord按组计数摘要

时间:2017-01-04 22:58:14

标签: ruby-on-rails postgresql join activerecord count

我有一个保存用户数据的Rails应用程序(在一个恰当命名的user_data对象中)。我想显示一个摘要表,其中显示了过去12个月内每个月创建的总用户数和仍处于活动状态的用户数(状态='有效')。

在针对我的Postgres数据库的SQL中,我可以通过以下查询获得我想要的结果(我在那里使用的日期由应用程序计算,因此您可以忽略该方面):

SELECT total.creation_month, 
       total.user_count AS total_count, 
       active.user_count AS active_count
FROM
(SELECT date_trunc('month',"creationDate") AS creation_month, 
        COUNT("userId") AS user_count
  FROM user_data 
  WHERE "creationDate" >= to_date('2015 12 21', 'YYYY MM DD')
  GROUP BY creation_month) AS total
LEFT JOIN
(SELECT date_trunc('month',"creationDate") AS creation_month, 
        COUNT("userId") AS user_count
  FROM user_data 
  WHERE "creationDate" >= to_date('2015 12 21', 'YYYY MM DD')
    AND status = 'Active'
  GROUP BY creation_month) AS active
ON total.creation_month = active.creation_month
ORDER BY creation_month ASC

如何使用ActiveRecord编写此查询?

我之前只有在我的显示中按月分组的总用户数,但我很难知道如何添加额外的活跃用户数列。

我的应用程序在Ruby 2.1.4和Rails 4.1.6上。

1 个答案:

答案 0 :(得分:0)

我放弃了尝试以ActiveRecord方式执行此操作。相反,我只是将我的查询构造成一个字符串并将字符串传递给

ActiveRecord::Base.connection.execute(sql_string)

这有副作用,我的结果集作为数组而不是一组对象出现。因此,获取值来自语法(其中user_data是从结果集中分配给单个记录的名称),如

user_data.total_count

user_data['total_count']

但那是一个小问题。不值得麻烦。