ruby-on-rails - 计算月份统计

标签 ruby-on-rails postgresql activerecord group-by

我有一个捐款表,我试图在其中计算每个月的总金额。几个月没有任何捐赠,我希望结果返回 0。

这是我当前的查询:

Donation.calculate(:sum, :amount, :conditions => { 
  :created_at => (Time.now.prev_year.all_year) }, 
  :order => "EXTRACT(month FROM created_at)", 
  :group => ["EXTRACT(month FROM created_at)"])

返回:

{7=>220392, 8=>334210, 9=>475188, 10=>323661, 11=>307689, 12=>439889}

有什么想法可以捕获空缺的月份吗?

最佳答案

通常情况下,您会加入一个日历表(或 PostgreSQL 中的 generate_series)来获取缺失的月份,但使用 Rails 最简单的方法是将您的结果合并到零散列中;像这样:

class Donation
  def self.by_month
    h = Donation.calculate(:sum, :amount, :conditions => { 
      :created_at => (Time.now.prev_year.all_year) }, 
      :order => "EXTRACT(month FROM created_at)", 
      :group => ["EXTRACT(month FROM created_at)"])
    Hash[(1..12).map { |month| [ month, 0 ] }].merge(h)
  end
end

然后只需调用类方法 h = Donation.by_month 即可获得结果。

关于ruby-on-rails - 计算月份统计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11675788/

相关文章:

ruby-on-rails - <> 在 Ruby 中是什么意思?

c# - 软删除 - ActiveRecord with Listeners

mysql - Activerecord 查询接口(interface)。计数、连接和分组

ruby-on-rails - Rails 3.1 before_create 回调在克隆模型后不会触发

ruby-on-rails - 在 JS 模块中使用 Rails-UJS(带有 webpacker 的 Rails 6)

ruby-on-rails - 使用全名搜索时,Gem Ransack 不会返回任何结果

ruby-on-rails - 无法使用强参数将自定义字段添加到 Rails 4 中的 Devise 用户模型

sql - Express SQL UNION 查询 Rails 方式

postgresql - 无法连接到 greenplum,错误消息为 : "no pg_hba.conf entry"

c# - 无法首先使用 Postgresql 和 Entity Framework 代码在 PostgreSQL 中创建数据库