如何在django中将两列与group by相乘和相加

时间:2013-08-13 21:22:46

标签: python sql django django-models group-by

我需要在Django中执行以下查询:

SELECT sum(T.width * T.height) as amount
FROM triangle T
WHERE T.type = 'normal'
GROUP BY S.color

如何使用django ORM执行此操作? 我试过这个:

Triangle.objects.filter(type='normal').\
                 extra(select={'total':'width*height'}).\
                 values('id', 'total').\
                 annotate(amount=Sum('total'))

但它不起作用,我得到的错误是TOTAL不在模型中。我该如何解决?

1 个答案:

答案 0 :(得分:11)

以下是您可以做的事情:

Triangle.objects.filter(type="normal").values('color').annotate(amount=Sum('id', field="width * height")

这将产生以下查询(我为了便于阅读而简化了):

SELECT color, sum(width * height) as amount
FROM triangle 
WHERE type = 'normal'
GROUP BY color

注意:我假设colorTriangle模型的字段,与其他字段一样。