如何在Django QuerySet中进行Group By Query?

Saq*_*Ali 4 django django-models django-queryset

我的Django模型:

class MyModel(models.Model):
    a = IntegerField()
    b = IntegerField()
Run Code Online (Sandbox Code Playgroud)

我想写一个回答以下问题的查询集:"对于每个不同的值a,什么是最小值,最大值和平均值b?"

我该怎么做?

SQL看起来像这样:

SELECT a, min(b), max(b), avg(b) FROM MyModel group by a
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何使用aggregateannotate方法.文档中的所有示例都显示了在对要分组的同一变量进行平均时如何使用这些方法.

ale*_*cxe 11

您可以使用Django聚合框架:

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

MyModel.objects.values('a').annotate(Min('b'), Max('b'), Avg('b'))
Run Code Online (Sandbox Code Playgroud)

values('a')这里的部分基本上是指"分组".