带有注释功能的Django窗口函数和聚合函数

时间:2019-02-07 14:32:29

标签: python django orm backend

我正在尝试在annotate中使用Django聚合函数SUM以及Django窗口函数。问题是,当我尝试在与先前注释别名相同的模型字段上使用聚合函数时,Django会抛出window functions are not allowed in GROUP BY错误。我在下面提供查询。

queryset = UserEcosystemApplicationUsage.objects.filter(
    user_app__user=child,
    from_datetime__gte=from_datetime,
    to_datetime__lte=to_datetime
).annotate(
    day_duration_seconds=Epoch(Window(
       expression=Sum('duration_time'),
          partition_by=[F('name'), F('date')]
       )),
    period_duration_seconds=Epoch(Window(
       expression=Sum('duration_time'),
          partition_by=[F('name')],
       )),
    # duration_total_seconds=Epoch(Window(
    #     expression=Sum('duration_time')
    # )),
    duration_total_seconds=Sum('duration_time')
).values(
    'duration_total_seconds'
).distinct()

现在,当使用注释的一部分查询而不是Sum(duration_time)时,一切都很好,但是我希望Sum('duration_time')也能正常工作。您能查明我做错了什么还是提供指向文档的链接来说明发生了什么情况?

1 个答案:

答案 0 :(得分:0)

我有类似的问题。就我而言,这是因为分页在查询集上使用了聚合count。您可能需要删除/更改在代码下游的查询集上完成的聚合。