簡體   English   中英

Django 將正值與負值分開

[英]Django Sum positive values separate from negative values

您可以將正值與負值分開求和嗎?

我有一個看起來像這樣的表:

class Order(models.Model):
    date = models.DateField()
    amount = models.DecimalField()

我正在尋找一個查詢集,它按周將正金額與負金額和組分開:

Year
Week
Sum of positive amounts
Sum of negative amounts

我可以通過以下方式每周分別獲得所有正數:

Order.objects.filter(amount__gt=0).annotate(year_week=Trunc('date', 'week', output_field=DateField())).\
annotate(year=ExtractYear('year_week')).annotate(week=ExtractWeek('year_week')).\
values("year_week", "year", "week").annotate(value=Sum("amount")).order_by("-year_week")

我可以為負值再次執行此操作,但是我有兩個單獨的查詢集。 我可以在不手動循環的情況下有效地合並它們嗎?或者有沒有辦法在一個查詢中同時完成這兩者?

是的,從,大多數聚合函數都有一個filter=…參數 [Django-doc]

from django.db.models import Q, Sum
from django.db.models.functions import ExtractYear, ExtractWeek

Order.objects.values(
    year=ExtractYear('date'),
    week=ExtractWeek('date')
).annotate(
    sum_pos=Sum('amount', filter=Q(amount__gt=0)),
    sum_neg=Sum('amount', filter=Q(amount__lt=0))
).order_by('year', 'week')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM