Django / Postgres:在RangeField上聚合

时间:2018-07-09 08:00:44

标签: sql django postgresql aggregate-functions django-orm

是否可以在Django的{​​{1}}上执行聚合功能?

假设我们有3个对象,分别为RangeField BigIntegerField

第一个obj:price_range

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

第3个目标:price_range = [1,5000]

这三个对象的price_range = [100,9000]Max聚合的结果将是:

Minmin = 1

我正在尝试通过以下方式汇总max = 9000Max

Min

哪个会引发错误:

  

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

1 个答案:

答案 0 :(得分:2)

您可以使用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]),您仍将获得范围[0, 100]