連續介紹了幾天 Postgres 的 SQL 沒辦法輕易辦到的 DuckDB query,我們可以來討論一個 Postgres 也有的強大 function, UNNEST
SELECT unnest(array[1, 2, 3]) as un;
如果我們有一個 array [1, 2, 3],可以使用 unnest 把 array 中的每個元素展開成一個 row
un |
---|
1 |
2 |
3 |
這個大家可能都很熟悉,不過當 array 是 2 維以上的 array, 你就沒辦法控制你的 unnest 層數, Postgres 會一口氣 unnest 所有 level
2 dim
SELECT unnest(ARRAY[[1, 2, 3], [4, 5, 6]]) AS un;
un |
---|
1 |
2 |
3 |
4 |
5 |
6 |
3 dim
SELECT unnest(ARRAY[
[[1, 2], [3, 4]],
[[5, 6], [7, 8]]
]) AS un;
un |
---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
DuckDB UNEST
對於多維 nested type 比較像我預期的,只解開一層,你想要多解開幾層必須由第二個參數指定
SELECT unnest(ARRAY[
[[1, 2], [3, 4]],
[[5, 6], [7, 8]]
]) AS un;
un |
---|
[[1, 2], [3, 4]] |
[[5, 6], [7, 8]] |
解開兩層
SELECT unnest(ARRAY[
[[1, 2], [3, 4]],
[[5, 6], [7, 8]]
], max_depth := 2) AS un;
un |
---|
[1, 2] |
[3, 4] |
[5, 6] |
[7, 8] |
一口氣封印解除到底
SELECT unnest(ARRAY[
[[1, 2], [3, 4]],
[[5, 6], [7, 8]]
], recursive := true) AS un;
un |
---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
你比較喜歡 Postgres 的 unnest 行為還是 DuckDB 的 unnest 行為,留言告訴我!!!