在聚合中使用过滤器或 Q

Utku Cansever
class Streamer(models.Model):
    name = models.CharField(max_length=50, null=True)
    is_working_with_us = models.BooleanField(default=False)

class Account(models.Model):
    streamer = models.ForeignKey(Streamer, on_delete=models.CASCADE)
    salary= models.Decimalfield(decimal_places=2, max_digits=7)
    cost= models.Decimalfield(decimal_places=2, max_digits=7)

我可以根据单个查询中的属性进行两个不同的聚合吗?如下所示。

streamer_salary_stats = Streamer.objects.filter(is_working_with_us=True).aggregate(
  expensive_streamers_sum=Sum(Q(cost__gt=10000.0),'salary'), # with Q or 
  cheap_streamers_sum=Sum(cost__lte=10000.0,'salary'),  # without Q
)

我知道可以这样做,但想在单个查询中实现这一点。

expensive_streamers_sum = Streamer.objects.filter(
    is_working_with_us=True, cost__gt=10000.0
).aggregate(s=Sum('salary'))['s']
cheap_streamers_sum = Streamer.objects.filter(
    is_working_with_us=True, cost__lte=10000.0
).aggregate(s=Sum('salary'))['s']
威廉·范昂森

您可以使用filter=…参数 [Django-doc]

streamer_salary_stats = Streamer.objects.filter(is_working_with_us=True).aggregate(
  expensive_streamers_sum=Sum('salary', filter=Q(cost__gt=10000.0)),
  cheap_streamers_sum=Sum('salary', filter=Q(cost__lte=10000.0))
)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章