簡體   English   中英

如何分組並連接PostgreSQL中的arrays

[英]How to Group by and concatenate arrays in PostgreSQL

我在 PostgreSQL 中有一張表。我想在按time分組后連接所有數組(即col )。 arrays 具有不同的尺寸。

| time  | col               |
|------ |------------------ |
| 1     | {1,2}             |
| 1     | {3,4,5,6}         |
| 2     | {}                |
| 2     | {7}               |
| 2     | {8,9,10}          |
| 3     | {11,12,13,14,15}  |

結果應如下所示:

| time  | col               |
|------ |------------------ |
| 1     | {1,2,3,4,5,6}     |
| 2     | {7,8,9,10}        |
| 3     | {11,12,13,14,15}  |

到目前為止,我的想法如下:

SELECT ARRAY(SELECT elem FROM tab, unnest(col) elem);

但這不會進行分組。 它只需要整個表並將其連接起來。

為了保護您陣列的相同尺寸,你不能直接使用array_agg()所以首先我們unnest您的陣列和適用distinct刪除重復(1)。 在外部查詢中,這是聚合的時間。 要保留值排序order by在聚合函數中包括order by順序排序:

select time, array_agg(col order by col) as col
from (
  select distinct time, unnest(col) as col
  from yourtable
) t
group by time
order by time

(1)如果您不需要重復刪除,只需刪除distinct單詞即可。

你可以使用下一個查詢

 SELECT 
      array_agg(_unnested.item) as array_coll
 from my_table
 left join LATERAL (SELECT unnest(my_table.array_coll) as item) _unnested ON TRUE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM