【发布时间】:2017-09-16 23:48:23
【问题描述】:
是否可以使用 django 的 orm 计算累积(运行)总和?考虑以下模型:
class AModel(models.Model):
a_number = models.IntegerField()
带有a_number = 1的一组数据。这样我在数据库中有多个(>1)AModel 实例,所有实例都带有a_number=1。我希望能够返回以下内容:
AModel.objects.annotate(cumsum=??).values('id', 'cumsum').order_by('id')
>>> ({id: 1, cumsum: 1}, {id: 2, cumsum: 2}, ... {id: N, cumsum: N})
理想情况下,我希望能够限制/过滤累积总和。所以在上述情况下,我想将结果限制为cumsum <= 2
我相信在 postgresql 中可以使用窗口函数实现累积和。这是如何翻译成 ORM 的?
【问题讨论】:
-
我不明白。什么是cumsum?而且只有一条 id=1 的记录
-
cumsum == 累积总和,显然这是针对多条记录的 - 进行了编辑以使其更清晰,因此数据集的大小大于一个。
-
我不认为你可以用 ORM 来做...改用 python
-
您要查找的短语是running total(或运行总和)。这是moving aggregates的一个特例。这是window functions的一种。
-
我认为累计和累计是一回事mathworld.wolfram.com/CumulativeSum.html。但是是的,它是我所追求的窗口函数。
标签: python django postgresql orm