gpt4 book ai didi

sql - Django /Postgres : Aggregate on RangeField

转载 作者:行者123 更新时间:2023-11-29 12:08:04 24 4
gpt4 key购买 nike

是否可以在 DjangoRangeField 上执行聚合功能?

假设我们有 3 个带有 BigIntegerField price_range 的对象。

第一个对象:price_range = [10,5000]

第二个对象:price_range = [1,5000]

第三个对象:price_range = [100,9000]

MaxMin 这三个对象的聚合结果为:

min = 1max = 9000

我正在尝试以这种方式聚合 MaxMin:

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

引发错误:

ProgrammingError: function min(int8range) does not exist LINE 1: SELECT MIN("app_mymodel"."price_range") AS "price_range__min" FROM "app...

最佳答案

您可以使用 Upper(..)Lower(..) 获取范围边界,因此:

from django.db.models.functions import <b>Upper, Lower</b>

MyModel.objects.aggregate(
Min(<b>Lower(</b>'price_range'<b>)</b>),
Max(<b>Upper(</b>'price_range'<b>)</b>)
)

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

显然现代版本的 Django 需要将字段命名为 @EricTheise says :

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

MyModel.objects.aggregate(
<b>low=</b>Min(Lower('price_range')),
<b>high=</b>Max(Upper('price_range'))
)

关于sql - Django /Postgres : Aggregate on RangeField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51240642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com