Django ORM查询GROUP BY由MAX组合的多个列

时间:2013-04-02 12:34:03

标签: python mysql orm django-models

我正在使用Django和MySQL。我有一个类似于以下的模型:

class MM(models.Model):
    a = models.IntegerField()
    b = models.IntegerField()
    c = models.DateTimeField(auto_now_add=True)

我有多行a等于b,我想执行以下SQL查询:

SELECT a, b, MAX(c) AS max FROM MM GROUP BY b, a;

如何使用Django ORM完成此操作?我尝试过使用注释的不同方法,但现在运气好了。

非常感谢!

3 个答案:

答案 0 :(得分:10)

我认为你可以这样做:

MM.objects.all().values('b', 'a').annotate(max=Max('c'))

请注意,您需要导入一些内容才能使用Max:from django.db.models import Max

values('b', 'a')GROUP BY b, a,而annotate(...)会在您的查询中计算出MAX。

答案 1 :(得分:2)

你也可以尝试这个

from django.db.models import Max

mm_list=MM.objects.all().values('b','a').annotate(max=Max('c'))
for mm in mm_list:
    a=mm['a']
    b=mm['b']
    max=mm['max']

答案 2 :(得分:0)

按两个字段对字段组求和。

from django.db.models import Sum

SQL

select caja_tipo_id, tipo_movimiento, sum(monto) from config_caja group by caja_tipo_id, tipo_movimiento

Django

objs = Caja.objects.values('caja_tipo__nombre','tipo_movimiento').order_by().annotate(total=Sum('monto'))