Django多个聚合与annotate()

时间:2016-04-24 12:37:06

标签: django

我对Django聚合很困惑,并希望通过示例进行一些解释。以下是docs所说的内容:

  

将多个聚合与annotate()组合将产生错误   结果因为使用了连接而不是子查询:

>>> Book.objects.first().authors.count()
2
>>> Book.objects.first().chapters.count()
3
>>> q = Book.objects.annotate(Count('authors'), Count('chapters'))
>>> q[0].authors__count
6
>>> q[0].chapters__count
6

首先,我无法理解该部分“因为使用了连接而不是子查询”。有人可以用SQL术语解释为什么会产生错误的结果以及子查询如何解决问题。

无论如何。 。 。所以我带走的学习从来没有使用annotate()的多个聚合函数,但在下面的部分中,文档提供了这个例子:

  

例如,要查找每家商店提供的书籍的价格范围,   你可以使用注释:

>>> from django.db.models import Max, Min
>>> Store.objects.annotate(min_price=Min('books__price'), max_price=Max('books__price'))

为什么多重聚合现在不成问题?

0 个答案:

没有答案