【问题标题】:Django ORM group by date from datetime with groups aggregationDjango ORM按日期从日期时间分组,分组聚合
【发布时间】:2020-09-09 12:50:18
【问题描述】:

我有一个表,我想先在其中做一个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,其数据按created_atDateTime 字段)的date 分组,并具有聚合值,如平均观看次数或点击次数等...

问题是 django 添加了group by "statistic"."created_at",这违反了我的要求。我尝试运行原始 SQL 查询,但不幸的是,它还需要按 created_at 分组。

请帮助我,解释为什么需要这样做,以及如何解决我的任务?

【问题讨论】:

    标签: sql group-by django-orm


    【解决方案1】:

    您可以使用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=TruncDate('created_at')
    ).annotate(
        Avg('views')
    ).order_by('date')

    【讨论】:

    • 你成就了我的一天。非常感谢兄弟。
    猜你喜欢
    • 1970-01-01
    • 2016-04-07
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 2015-07-15
    • 2014-03-28
    相关资源
    最近更新 更多