我有一个保存用户数据的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上。
答案 0 :(得分:0)
我放弃了尝试以ActiveRecord方式执行此操作。相反,我只是将我的查询构造成一个字符串并将字符串传递给
ActiveRecord::Base.connection.execute(sql_string)
这有副作用,我的结果集作为数组而不是一组对象出现。因此,获取值来自语法(其中user_data是从结果集中分配给单个记录的名称),如
user_data.total_count
到
user_data['total_count']
但那是一个小问题。不值得麻烦。