Django:按月/年分组的日期属性求和
我想把这个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;")