11

我需要在 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 不在模型中。我该如何解决?

4

1 回答 1

14

以下是您可以执行的操作:

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

注意:我假设color是一个Triangle模型字段作为其他字段。

于 2013-08-13T22:25:44.000 回答