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

5 投票
2 回答
5870 浏览
提问于 2025-04-15 23:22

我想把这个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

我想你不能在使用 values("date__month") 之后对“数量”进行汇总,因为这样做只会在查询结果中保留“日期”和“月份”。

2

aggregate 只能生成一个汇总值。

你可以通过以下查询来获取当前月份的小时总和。

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

所以,要获取所有月份的 HourEntry 的汇总值,你可以遍历数据库中所有月份的数据。不过,使用原始 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;")

撰写回答