You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何获取分组后range类型列的外边界范围

解决PostgreSQL按分组求Range外边界的问题

你原来的查询失败是因为upper(value)和lower(value)没有经过聚合处理——分组后每个name对应多行value,数据库不知道该取哪一行的上下边界值。要实现需求,你需要用聚合函数提取组内所有range的最小左边界和最大右边界,再组合成外边界range,或者直接输出拆分后的边界列。

方法1:生成合并后的外边界Range列

使用min()取组内所有range的最小左边界,max()取最大右边界,再用对应类型的range构造函数(比如int4range,根据你的range实际类型调整)组合成新的range:

SELECT
  name,
  int4range(
    MIN(lower(value)),
    MAX(upper(value))
  ) AS outer_range
FROM parameters
GROUP BY name;

如果你的range是其他数值类型(比如bigint对应int8range,numeric对应numrange),替换对应的range构造函数即可。

方法2:拆分输出上下边界列

如果不需要合并成range类型,直接输出拆分后的边界列:

SELECT
  name,
  MIN(lower(value)) AS lower_bound,
  MAX(upper(value)) AS upper_bound
FROM parameters
GROUP BY name;

验证结果

用你提供的示例数据测试,两种方法都会得到符合预期的结果:

  • 方法1输出的outer_range列会是[1,3]、[10,19]、[1,9]
  • 方法2会输出对应的上下边界数值列

内容的提问来源于stack exchange,提问作者Joachim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 01:24:29