2011-01-18 29 views
3

我需要做一個按日期和月份分組的特定列的總和。在SQL(Postgres的),它會是這個樣子:我可以在Django QuerySet中進行自定義複雜組嗎?

select sum(amount) from somewhere group by extract(year from date), extract(month from date) 

可以這樣表述爲一個Django QuerySet?對我來說似乎不行,但我並不想訴諸普通的舊SQL。歡迎任何其他想法。

似乎可能使用queryset.query.group_by,但我沒有任何運氣 - 一個工作示例將受到歡迎。

回答

8

您可以使用extra方法在進行聚合之前添加年份和日期值。

Somewhere.objects.extra(select={'year': 'EXTRACT(year FROM date)', 
           'month': 'EXTRACT(month FROM date)'} 
         ).values_list('year', 'month').annotate(Sum('amount')) 
+0

謝謝,沒有想到這樣! – VoY

+0

請注意,對於PostgreSQL **用戶來說,這樣做效率更高:'.extra(select = {'date':'date_trunc('month',date)「})...'。它會爲您提供每個月的第一天的日期。 – intgr

相關問題