【问题标题】:Summary Count by Group with ActiveRecord使用 ActiveRecord 按组汇总计数
【发布时间】:2017-01-04 22:58:13
【问题描述】:

我有一个保存用户数据的 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 上。

【问题讨论】:

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


    【解决方案1】:

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

    ActiveRecord::Base.connection.execute(sql_string)
    

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

    user_data.total_count
    

    user_data['total_count']
    

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

    【讨论】:

      猜你喜欢
      • 2020-05-05
      • 1970-01-01
      • 2022-01-27
      • 1970-01-01
      • 1970-01-01
      • 2019-03-19
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      相关资源
      最近更新 更多