Gui*_*nda 4 sql postgresql aggregate aggregate-functions
我有以下表结构
start|end
09:00|11:00
13:00|14:00
Run Code Online (Sandbox Code Playgroud)
我知道
SELECT ARRAY_AGG(start), ARRAY_AGG(end)
Run Code Online (Sandbox Code Playgroud)
将会导致
start|end
[09:00,13:00]|[11:00,14:00]
Run Code Online (Sandbox Code Playgroud)
但我怎样才能得到下面的结果呢?结果
[09:00,11:00,13:00,14:00]
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我正在使用 Postgres
您可以进行数组串联(如果顺序不重要):
SELECT ARRAY_AGG(start) || ARRAY_AGG(end) FROM TABLE1
Run Code Online (Sandbox Code Playgroud)
如果顺序很重要,您可以使用戈登的方法,但是:
array_agg(d order by d ASC)使用unnest代替union all,因为戈登的解决方案 ( union all) 执行两次序列扫描。如果表很大,使用以下方法可能会提高性能:
SELECT array_agg(d ORDER BY d ASC) FROM(
SELECT unnest(ARRAY[start] || ARRAY[end]) as d from table1
) sub
Run Code Online (Sandbox Code Playgroud)它只对表执行一次序列扫描(并且会更快)。
| 归档时间: |
|
| 查看次数: |
1888 次 |
| 最近记录: |