将sql查询转换为django orm

anauzrmj  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(383)

我有sql查询,我需要在django中使用orm技术。

SELECT a.id, a.amount, SUM(b.amount)
FROM cashflow_statement a, cashflow_statement b
WHERE b.id <= a.id GROUP BY a.id
ORDER BY a.id

编辑:django模型

class Statement(models.Model):
    amount = models.DecimalField(max_digits=10, decimal_places=2)
    date = models.DateField()

    def __str__(self):
        return self.title

输入数据

id, amount, date
1.    10   25/06/2020
2.    -10   25/06/2020
3.    40   25/06/2020
4.    10   25/06/2020
5.    -30   25/06/2020
6.    10   25/06/2020

Need Output:
id, amount, sum
1.   10.     10 
2.   -10.    0
3.    40.    40
4.   10.     50
5.   -30.    20
6.    10.    30
x6yk4ghg

x6yk4ghg1#

x=Statement.objects.filter(date='your date')
sum=0
for i in x:
   sum+=x.amount

也许我在代码中有错误,但我认为您正在寻找.filter()部分。如果需要同时使用多个过滤器,可以这样想:

x=Statement.objects.filter(date='your date').filter(amount<10)
icomxhvb

icomxhvb2#

目前django不支持子查询中的聚合,但通过一种解决方法,我们可以“欺骗”系统生成正确的查询:

from django.db.models import OuterRef, Sum, Subquery, Value

Statement.objects.annotate(
    sum=Subquery(
        Statement.objects.filter(
            pk__lte=OuterRef('pk')
        ).values(x=Value(0)).order_by('x').annotate(
            sum=Sum('amount')
        ).values('sum')[:1]
    )
)

相关问题