Django ORM group by date from datetime with groups 聚合
Django ORM group by date from datetime with groups aggregation
我有一个 table,我想先做一个 grouping by
,然后将这些组聚合成一些值。所以...
Table "统计数据"
| 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
expression [Django-doc]:
截断日期
from django.db.models import Avg
from django.db.models.functions import TruncDate
Statistic.objects.filter(
owner_id=X
).values(
date=<b>TruncDate('created_at')</b>
).annotate(
Avg('views')
).order_by('date')
我有一个 table,我想先做一个 grouping by
,然后将这些组聚合成一些值。所以...
Table "统计数据"
| 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
expression [Django-doc]:
from django.db.models import Avg
from django.db.models.functions import TruncDate
Statistic.objects.filter(
owner_id=X
).values(
date=<b>TruncDate('created_at')</b>
).annotate(
Avg('views')
).order_by('date')