sql - Django ORM按日期从日期时间分组,分组聚合
问题描述
我有一个表,我想先做一个grouping by
,然后将这些组聚合成一些值。所以...
表“统计”
| owner_id | created_at | views | clicks | ... other numbers
当我这样做时,我想得到什么:
Statistic.objects.filter(
owner_id=X
).annotate(
day=Cast('created_at', DateField())
).values(
'day'
).annotate(
models.Avg('views')
)
... 是list
一个数据按date
从created_at
(DateTime
字段)转换分组的数据和聚合值,如平均查看次数或点击次数等...
问题是 django 添加了group by "statistic"."created_at"
,这违反了我的要求。我曾尝试运行原始 SQL 查询,但不幸的是,它还需要按 created_at 分组。
请帮助我,解释为什么需要这样做,以及如何解决我的任务?
解决方案
TruncDate
您可以使用表达式 [Django-doc]截断日期:
from django.db.models import Avg
from django.db.models.functions import TruncDate
Statistic.objects.filter(
owner_id=X
).values(
date=TruncDate('created_at')
).annotate(
Avg('views')
).order_by('date')