12

我正在将 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 如何做到这一点?我已经尝试过使用注释的不同方法,但到目前为止还算幸运。

非常感谢!

4

3 回答 3

13

我认为您可以执行以下操作:

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

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

values('b', 'a')将给出GROUP BY b, aannotate(...)计算查询中的 MAX。

于 2013-05-14T16:07:03.963 回答
3

你也可以试试这个

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']
于 2016-02-16T11:36:35.253 回答
1

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

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

姜戈

objs = Caja.objects.values('caja_tipo__nombre','tipo_movimiento').order_by().annotate(total=Sum('monto'))
于 2016-02-15T22:12:05.883 回答