我对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'))
为什么多重聚合现在不成问题?