Postgres:一次选择获取最小值,最大值,聚合值

Posted

技术标签:

【中文标题】Postgres:一次选择获取最小值,最大值,聚合值【英文标题】:Postgres: get min, max, aggregate values in one select 【发布时间】:2014-03-11 07:49:28 【问题描述】:

我正在使用 Postgresql 8.4。我有一张这样的桌子:

 type | value
------+-------
 1    | 5
 2    | 6
 1    | 4
 3    | 10

我想写一个选择,它将给我最小值和最大值,并将所有类型的聚合为integer[]。期望的结果应该是:

 min | max | types
-----+-----+-----------
 4   | 10  | 1, 2, 3

为了得到最小值和最大值,我已经有了:

SELECT MIN(value) min, MAX(value) max FROM table;

为了获得独立选择中的类型,我使用:

SELECT array_agg(DISTINCT type) types FROM table;

我怎样才能将这些组合成一个选择(不是太低效)?

【问题讨论】:

SELECT MIN(value) min, MAX(value) max, array_agg(DISTINCT type) types FROM table; 不适合你吗? 【参考方案1】:
SELECT array_agg(DISTINCT type) AS types,
       MIN(value) AS min,
       MAX(value) AS max
FROM your_table

【讨论】:

【参考方案2】:

试试这个查询:

SELECT * FROM
(SELECT MIN(value),MAX(value) FROM table1)t1,
(SELECT array_agg(DISTINCT type) FROM table1)t2;

SQL Fiddle

【讨论】:

以上是关于Postgres:一次选择获取最小值,最大值,聚合值的主要内容,如果未能解决你的问题,请参考以下文章

Postgres:获取最大值和最小值,以及它们出现的时间戳

跨字段选择最小值和最大值并按用户聚合

sql - 使用聚合函数(最小值/最大值)作为选择语句的一部分

如何在 Django JSONField 数据上聚合(最小/最大等)?

SQL:如何根据窗口框架中的聚合最小值/最大值选择列值(包括前面的行)

第三节 java 数组(循环遍历获取数组的最值(最大值和最小值)选择排序冒泡排序练习控制台输出大写的A)