将SQL查询转换为Django ORM

问题描述 投票:0回答:1

我有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
sql django postgresql django-models django-orm
1个回答
0
投票
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)


0
投票
当前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(None)).order_by('x').annotate( sum=Sum('amount') ).values('sum')[:1] ) )

© www.soinside.com 2019 - 2024. All rights reserved.