我有一个捐款表,我试图在其中计算每个月的总金额。几个月没有任何捐赠,我希望结果返回 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/