Выровнять массив в таблице, который может быть NULL или пустым в presto

У меня есть следующая таблица, которую я использую в своем запросе sql.

И я хотел бы превратить его в следующую форму

Как мне это сделать? Я использовал unnest и cross join. Из-за пустого массива я не получил всего представления.

1 ответ

Вы можете использовать UNNEST в контексте LEFT JOIN:

      WITH t(v) AS (VALUES 
    ARRAY[1,2],
    NULL,
    ARRAY[3,4],
    ARRAY[]
)
SELECT e
FROM t LEFT JOIN UNNEST(t.v) AS u(e) ON true

Это было добавлено в Trino 319 ( ранее известный как Presto SQL).

Если у вас не последняя версия, вы можете заменить ее следующим образом:

      ...
FROM t CROSS JOIN UNNEST(if(t.v IS NULL OR cardinality(t.v) = 0, ARRAY[NULL], t.v)) AS u(e)
Другие вопросы по тегам