Django ORM按store_id分组并指定日期间隔计算字段均值如何实现
实现方法
你可以通过Django ORM的filter + values + annotate组合实现需求,具体步骤如下:
首先导入需要的依赖:
from django.db.models import Avg from datetime import date
执行查询语句:
result = MyModel.objects.filter( # 筛选指定日期区间的数据 day_dt__range=(date(2021, 10, 1), date(2021, 10, 4)) # 指定按store_id分组 ).values('store_id').annotate( # 聚合计算两个字段的平均值 param1_avg=Avg('param1'), param2_avg=Avg('param2') )
如果需要和示例一致输出整数类型的平均值,可以将聚合结果强制转换为整数,修改annotate部分即可:
from django.db.models import Avg, IntegerField from django.db.models.functions import Cast result = MyModel.objects.filter( day_dt__range=(date(2021, 10, 1), date(2021, 10, 4)) ).values('store_id').annotate( param1_avg=Cast(Avg('param1'), output_field=IntegerField()), param2_avg=Cast(Avg('param2'), output_field=IntegerField()) )
返回结果说明
返回的result是可迭代的QuerySet对象,每个元素的结构为{'store_id': 'STORE1', 'param1_avg': 6, 'param2_avg': 10},和你期望的输出结构完全匹配。
内容的提问来源于stack exchange,提问作者Альберт Александров
相关产品推荐
相关产品推荐

