我正在使用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完成此操作?我尝试过使用注释的不同方法,但现在运气好了。
非常感谢!
答案 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'))