Как перенести ARRAY_AGG с несколькими аргументами в Postgresql на Snowflake - PullRequest
1 голос
/ 21 сентября 2019

Snowflake поддерживает ARRAY_AGG , но может принимать только параметр, в то время как Версия Postgresql поддерживает несколько.

Мне нужно перенести следующий фрагмент из Posgresql в Snowflake:

ARRAY_AGG(state, city, zipcode)

где штат, город и почтовый индекс - это поля в одной из моих таблиц.

Есть ли обходной путь?Я знаю, что могу создать 3 отдельных поля, но это нежелательно.

1 Ответ

2 голосов
/ 23 сентября 2019

В зависимости от того, хотите ли вы Массив Массива или Массив Объектов

WITH r AS (
    SELECT column1 AS A, column2 AS B FROM (VALUES (1,'A'),(14,'B'),(35,'C'),(91,'D'),(105,'E'))
)
SELECT ARRAY_AGG(ARRAY_CONSTRUCT(a,b)) FROM r;

дает:

[ [ 1, "A" ],  [ 14, "B" ], [ 35, "C" ], [ 91, "D" ], [ 105, "E" ] ]

или

WITH r AS (
    SELECT column1 AS A, column2 AS B FROM (values (1,'A'),(14,'B'),(35,'C'),(91,'D'),(105,'E'))
)
SELECT ARRAY_AGG(OBJECT_CONSTRUCT('A',a,'B',b)) FROM r;

дает:

[ { "A": 1, "B": "A" }, { "A": 14, "B": "B" }, { "A": 35, "B": "C" }, { "A": 91, "B": "D" }, { "A": 105, "B": "E" } ]

https://docs.snowflake.net/manuals/sql-reference/functions/array_agg.html https://docs.snowflake.net/manuals/sql-reference/functions/array_construct.html https://docs.snowflake.net/manuals/sql-reference/functions/object_construct.html

...