【问题标题】:How to do this Group By Query in Django QuerySet?如何在 Django QuerySet 中按查询分组?
【发布时间】:2015-02-26 02:50:52
【问题描述】:

我的 Django 模型:

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

我想编写一个查询集来回答以下问题:“对于a 的每个不同值,b 的最小值、最大值和平均值是多少?”

我该怎么做?

SQL 看起来像这样:

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

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

【问题讨论】:

  • 只使用原始查询。更擅长 django 的人可能会回答,但现在可能最容易做到。

标签: django django-models django-queryset


【解决方案1】:

您可以使用Django aggregation framework:

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

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

这里的values('a') 部分基本意思是“按a分组”。

【讨论】:

  • 谢谢!我注意到django.db.models 模块有方法MinMaxAvg。是否也有任何自动计算中位数的方法?
  • @SaqibAli 很高兴为您提供帮助。 Median 不是聚合框架的一部分。查看更多信息和解决方法:stackoverflow.com/questions/942620/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 2014-10-24
  • 2017-04-26
  • 2012-10-28
  • 2020-08-06
相关资源
最近更新 更多