【问题标题】:Django: filter by aggregateDjango:按聚合过滤
【发布时间】:2017-07-13 09:47:09
【问题描述】:

我正在尝试按使用聚合计算的值进行过滤。目前我正在这样做:

max_val = some_queryset.aggregate(max_val=Max('some_prop'))['max_val']
some_queryset.filter(some_prop=max_val)

有没有一种方法可以使用max_val 进行过滤,所有这些都在一个查询中完成?

不幸的是,我使用的是 Django 1.4。不,我不能更新它,这根本不取决于我。

【问题讨论】:

    标签: python django django-1.4


    【解决方案1】:

    您可以注释新字段并使用 F 表达式与聚合字段中的值进行比较:

    from django.db.models import F, Max
    
    some_queryset.annotate(max_val=Max('some_prop')).filter(max_val=F('another_prop'))
    

    注释和F expressions 存在于 Django 1.4 中。

    【讨论】:

      【解决方案2】:

      我不知道这是否适用于 django 1.4,但如果需要进一步过滤,则需要使用 annotate。

      some_queryset.annotate(max_val=Max('some_prop')).filter(max_val=max_val)

      您可能需要从聚合查询中填充 max_val

      【讨论】:

      • 右边是问题要消除的变量。
      猜你喜欢
      • 2018-04-18
      • 2017-03-09
      • 1970-01-01
      • 2012-07-24
      • 2020-09-11
      • 2011-08-19
      • 2016-08-13
      • 2014-12-17
      • 2018-06-16
      相关资源
      最近更新 更多