[英]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")
我可以為負值再次執行此操作,但是我有兩個單獨的查詢集。 我可以在不手動循環的情況下有效地合並它們嗎?或者有沒有辦法在一個查詢中同時完成這兩者?
是的,從django-2.0 開始,大多數聚合函數都有一個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.