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:一次选择获取最小值,最大值,聚合值的主要内容,如果未能解决你的问题,请参考以下文章
sql - 使用聚合函数(最小值/最大值)作为选择语句的一部分
如何在 Django JSONField 数据上聚合(最小/最大等)?