PostgreSQL中如何查询某列最小值与最大值并以数组形式输出
解决方法
现有表结构:
| id | value |
|---|---|
| 1 | 10 |
| 2 | 20 |
| 3 | 30 |
| 4 | 40 |
你尝试的语句select json_agg(min(value), max(value)) as value;报错,原因是不能在json_agg聚合函数中直接嵌套其他聚合函数(min/max)。要得到[10,40]这样的JSON数组结果,有两种简洁的解决方式:
方法1:使用json_build_array直接构造数组
这是最直接高效的方式,先计算出value列的最小值和最大值,再用json_build_array将它们组合成JSON数组:
SELECT json_build_array(MIN(value), MAX(value)) AS value;
方法2:通过子查询生成行数据再聚合
先将最小值和最大值分别作为单独的行,再用json_agg将这些行聚合为数组:
SELECT json_agg(val) AS value FROM ( SELECT MIN(value) AS val FROM your_table UNION ALL SELECT MAX(value) AS val FROM your_table ) AS min_max_vals;
两种方法都能返回你需要的[10,40]结果,其中方法1更简洁高效。
内容的提问来源于stack exchange,提问作者Megha Verma
相关产品推荐
相关产品推荐

