【发布时间】:2021-01-11 18:44:27
【问题描述】:
我有四个表 A、B、C 和 D。每个表通过 id 列以 A -> B -> C -> D 的方式关联。 例如。 A.id = B.a_id,B.id = C.b_id 和 C.id = D.c_id
我正在努力实现这样的目标
SELECT x.id, min(x.total) as mintotal FROM (SELECT "A"."id",
SUM(("D"."amount" * "D"."quantity")) AS "total", "C"."id" AS "qid"
FROM "A" LEFT OUTER JOIN "B" ON ("A"."id" = "B"."a_id") LEFT OUTER
JOIN "C" ON ("B"."id" = "C"."c_id") LEFT OUTER JOIN "D" ON ("C"."id"
= "D"."c_id") GROUP BY "A"."id", "C"."id") as x group by x.id ORDER BY mintotal ASC
我的等效 django 代码
query1 = (
A.objects.all().annotate(
qid=models.F('b__c__id'),
total=Sum(models.ExpressionWrapper(
models.F('b__c__d__amount')*models.F('b__c__d__quantity'),
output_field=models.DecimalField()
))
).order_by('total')
)
它给了我内部查询输出,但是当我再次尝试选择 id 和 Min(total) 时,它会抛出错误 -
FieldError: Cannot compute Min('total'): 'total' is an aggregate
我是 Django 新手,我不确定如何使用子查询或存在来获得此结果。任何帮助将不胜感激
【问题讨论】: