我正在尝试对组内的成本求和,然后将多个组的累计成本相加。简化:
class Cost(Model):
year = IntegerField()
month = IntegerField()
cost = DecimalField()
个字符
但是我不知道如何用Django的ORM写它:
innerq = Cost.objects.values("year", "month").annotate(month_total=Sum("cost"))
型
这一切都很好,但如果我这样做:
outerq = innerq.annotate(
cum_total=Window(
expression=Sum("month_total"),
partition_by=[Value(1)],
order_by=[F("year"), F("month")],
frame=RowRange(None, 0), # UNBOUNDED PRECEDING -> CURRENT ROW
),
)
型
我得到一个:
FieldError:无法计算Sum('month_total'):'month_total'是聚合
我如何将查询集innerq
强制到子查询中,就像我上面的SQL一样?(我知道Subquery
,只是还没有找到在这里应用它的方法。)
1条答案
按热度按时间p1iqtdky1#
我一直在struggling上遇到类似的问题,刚刚发现了django-cte项目,该项目似乎证实了开箱即用的ORM没有所需的支持,并提供了一种使用
With
的方法。使用它,我相信你的问题的简化版本可以通过这样的方式解决:
字符串
(My用例与您的用例有点不同)。更多信息请参见docs。