Sql Django/Postgres:RangeField上的聚合
是否可以在Sql Django/Postgres:RangeField上的聚合,sql,django,postgresql,aggregate-functions,django-orm,Sql,Django,Postgresql,Aggregate Functions,Django Orm,是否可以在Django的RangeField上执行聚合功能 假设我们有3个对象具有bigingerfieldprice\u范围 第一个目标:价格范围=[105000] 第二个目标:价格范围=[15000] 第三个目标:价格范围=[1009000] 这三个对象的Max和Min聚合结果为: min=1和max=9000 我试图通过以下方式聚合Max和Min: MyModel.objects.aggregate(Min('price_range'),Max('price_range'),) 这会引起
Django
的RangeField
上执行聚合功能
假设我们有3个对象具有bigingerfield
price\u范围
第一个目标:价格范围=[105000]
第二个目标:价格范围=[15000]
第三个目标:价格范围=[1009000]
这三个对象的Max
和Min
聚合结果为:
min=1
和max=9000
我试图通过以下方式聚合Max
和Min
:
MyModel.objects.aggregate(Min('price_range'),Max('price_range'),)
这会引起错误:
编程错误:函数min(int8range)不存在第1行:
从“应用程序”中选择最小值(“应用程序我的模型”,“价格范围”)作为“价格范围最小值”
您可以使用
上限(…)
和下限(…)
获得范围边界,因此:
from django.db.models.functions import Upper, Lower
MyModel.objects.aggregate(Min(Lower('price_range')), Max(Upper('price_range')))
如果两者不重叠呢?比如
[1,5]
和[8,10]
?@WillemVanOnsem这没关系。我想得到最低下限和最高上限。是的,这正是我想要的。这是为了过滤的目的。感谢几年后遇到这个答案,Django(3.0.6)给我一个TypeError:复杂表达式需要一个别名
。在我的指导下,我需要执行与MyModel.objects.aggregate(lower=Min(lower('price\u range')),upper=Max(upper('price\u range'))等效的操作。
from django.db.models.functions import Upper, Lower
MyModel.objects.aggregate(
low=Min(Lower('price_range')),
high=Max(Upper('price_range'))
)