代码之家  ›  专栏  ›  技术社区  ›  dabadaba

Django:按聚合过滤

  •  1
  • dabadaba  · 技术社区  · 8 年前

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

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

    有什么方法可以用吗 max_val 要过滤,所有操作都在一个查询中完成?

    2 回复  |  直到 8 年前
        1
  •  2
  •   Seonghyeon Cho Moses Koledoye    5 年前

    您可以注释新字段,并使用 F 表达式:

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

    注释和 F expressions

        2
  •  -1
  •   sagarchalise    8 年前

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

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

    max_val