小编典典

Django / Postgres:在RangeField上聚合

sql

是否有可能执行聚合功能DjangoRangeField

假设我们有3个对象BigIntegerField price_range

第一个目标: price_range = [10,5000]

第二个obj: price_range = [1,5000]

第3个目标: price_range = [100,9000]

这三个对象的结果MaxMin汇总将是:

min = 1max = 9000

我试图聚集MaxMin这种方式:

MyModel.objects.aggregate(Min('price_range'),Max('price_range'),)

这引起了错误:

ProgrammingError:函数min(int8range)不存在第1行:SELECT MIN(“ app_mymodel”。“
price_range”)AS“ price_range__min” FROM“ app …


阅读 164

收藏
2021-04-28

共1个答案

小编典典

您可以获取与域范围Upper(..)Lower(..)这样:

from django.db.models.functions import **Upper, Lower**

MyModel.objects.aggregate(Min( **Lower(** 'price_range' **)** ), Max( **Upper(** 'price_range' **)** ))

但是请注意,如果范围不重叠(例如[0, 20][50, 100]),您仍然会得到range [0, 100]

from django.db.models.functions import Upper, Lower

MyModel.objects.aggregate(
    **low=** Min(Lower('price_range')),
    **high=** Max(Upper('price_range'))
)
2021-04-28