如何在 Django QuerySet 中按查询分组?

How to do this Group By Query in Django QuerySet?

我的 Django 模型:

class MyModel(models.Model):
    a = IntegerField()
    b = IntegerField()

我想编写一个查询集来回答以下问题:"For each distinct value of a, what is the min, max and average value of b?"

我该怎么做?

SQL 看起来像这样:

SELECT a, min(b), max(b), avg(b) FROM MyModel group by a

但我不知道如何使用 aggregateannotate 方法。文档中的所有示例都展示了在对要分组的同一变量进行平均时如何使用这些方法。

您可以使用 Django aggregation framework:

from django.db.models import Max, Min, Avg

MyModel.objects.values('a').annotate(Min('b'), Max('b'), Avg('b'))

这里的values('a')部分基本上就是"group by a".