Django:按月/年分组的日期属性的总和

时间:2010-05-31 11:53:26

标签: python django django-orm

我想把这个查询从SQL转到Django:

"select date_format(date, '%Y-%m') as month, sum(quantity) as hours from hourentries group by date_format(date, '%Y-%m') order by date;"

导致问题的部分是聚合时按月分组。我试过这个(这似乎合乎逻辑),但它不起作用:

HourEntries.objects.order_by("date").values("date__month").aggregate(Sum("quantity"))

2 个答案:

答案 0 :(得分:2)

aggregate只能生成一个汇总值。

您可以通过以下查询获得当月的总小时数。

from datetime import datetime
this_month = datetime.now().month
HourEntries.objects.filter(date__month=this_month).aggregate(Sum("quantity"))

因此,要获取HourEntry所有月份的聚合值,您可以遍历db中所有月份的查询集。但最好使用原始sql。

HourEntries.objects.raw("select date_format(date, '%Y-%m') as month, sum(quantity) as hours from hourentries group by date_format(date, '%Y-%m') order by date;")

答案 1 :(得分:0)

我猜你在使用values("date__month")后无法汇总“数量”,因为这只会在QuerySet中留下“date”和“month”。