Postgres:在一个选择中获取最小值,最大值,聚合值

时间:2014-03-11 07:49:28

标签: sql postgresql aggregate-functions

我正在使用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;

如何将这些组合成一个选择(效率不是太低)?

2 个答案:

答案 0 :(得分:2)

SELECT array_agg(DISTINCT type) AS types,
       MIN(value) AS min,
       MAX(value) AS max
FROM your_table

答案 1 :(得分:1)

尝试此查询:

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

SQL Fiddle