【发布时间】:2019-09-23 14:11:14
【问题描述】:
我有统计数据视图,我在某些基本查询集的不同过滤器上计算多个 count:
qs = Model.onjects.filter(...).annotate(a=...)
a = qs.filter(Q(a__lt=5)).count()
b = qs.filter(Q(a__lt=10)).count() # this is just an example, real filters are more complex
...
但是每个计数都会对数据库进行单独的查询,我想对其进行优化。我试过aggregation:
qs.aggregate(
a=Count('a', filter=Q(a__lt=5)),
b=Count('a', filter=Q(a__lt=10)),
)
但出现错误:django.db.utils.OperationalError: (1054, "Unknown column '__col2' in 'field list'")。我什至不知道这个__col2 来自哪里。
似乎聚合不适用于注释,因为当我在 count.filter 中使用常规模型字段而不是注释字段 a 时,一切都很好。
【问题讨论】:
-
真正的过滤器是否包含
__col2,最好看看是什么触发了错误,这样我们就可以看到什么导致了错误。 -
aggregation是错字吗?应该是aggregate -
只要
Count('pk', filter=Q(a__lt=5))。计算哪一列并不重要,但计算的列可能是个问题。 -
我猜你想要的是一种“双重”注释。比如:
qs.annotate(a=Count("a", filter=Q(a__lt=5))) -
我明白你的意思@dirkgroten。我误解了这个问题。所以,忽略我的评论:)
标签: django django-orm