我有如下表结构
start|end
09:00|11:00
13:00|14:00
我知道
SELECT ARRAY_AGG(start), ARRAY_AGG(end)
将导致
start|end
[09:00,13:00]|[11:00,14:00]
但是我怎样才能得到下面的结果呢? 结果
[09:00,11:00,13:00,14:00]
顺便说一句,我正在使用 Postgres
最佳答案
您可以进行数组连接(如果顺序不重要):
SELECT ARRAY_AGG(start) || ARRAY_AGG(end) FROM TABLE1
如果顺序很重要,您可以使用 Gordon's方法但是:
- 添加聚合顺序
array_agg(d order by d ASC)
使用
unnest
而不是union all
,因为Gordon 的解决方案(union all
)执行两次序列扫描。如果表很大,使用性能可能会更好:SELECT array_agg(d ORDER BY d ASC) FROM( SELECT unnest(ARRAY[start] || ARRAY[end]) as d from table1 ) sub
它只对表执行一次序列扫描(而且会更快)。
关于sql - 将两列和两行聚合为一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33257349/