我有一个捐款表,我试图计算每个月的总金额。几个月没有任何捐款,我希望结果返回 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}
有什么想法如何抓住空闲的几个月吗?
通常,您会将联接保留到日历表(或generate_series http://www.postgresql.org/docs/current/static/functions-srf.html#FUNCTIONS-SRF-SERIES在 PostgreSQL 中)来获取缺失的月份,但使用 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
,得到你的结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)