Возвращает одно значение, являющееся результатом применения лямбда-функции к каждому элементу входного списка. Подробная информация на странице Лямбда-функции.
Объединяет kLIST в новый LIST, длина которого будет равна длине самого длинного списка. Его элементы — структуры из k элементов из каждого списка list_1, …, list_k, отсутствующие элементы заменяются на NULL. Если truncate задан, все списки усекаются до длины наименьшего списка.
Разъединяет список на один уровень. Обратите внимание, что это специальная функция, изменяющая мощность результата. Более подробная информация на странице unnest.
Создаёт список из тех элементов входного списка, для которых лямбда-функция возвращает значение true. См. страницу Лямбда-функции для получения дополнительной информации.
Возвращает одно значение, являющееся результатом применения лямбда-функции к каждому элементу входного списка. Для получения более подробной информации см. страницу Лямбда-функции.
Возвращает список, являющийся результатом применения лямбда-функции к каждому элементу входного списка. Для получения более подробной информации см. страницу Лямбда-функции.
Комбинирует kLIST в новый LIST, длина которого будет равна длине самого длинного списка. Его элементы — структуры из k элементов каждого списка list_1, …, list_k, пропущенные элементы заменяются на NULL. Если truncate задано, все списки усекаются до длины самого короткого.
Разъединяет список на один уровень вложенности. Обратите внимание, что это специальная функция, изменяющая мощность результата. Для получения более подробной информации см. страницу unnest страницу.
Списки в стиле Python могут использоваться для вычисления выражений над элементами списка. Например:
SELECT [lower(x) FOR x IN strings] AS strings
FROM (VALUES (['Hello', '', 'World'])) t(strings);
строки
[hello, , world]
SELECT [upper(x) FOR x IN strings IF len(x) > 0] AS strings
FROM (VALUES (['Hello', '', 'World'])) t(strings);
строки
[HELLO, WORLD]
Списки в стиле Python также могут использовать положение элементов списка, добавив второй параметр. В следующем примере используется x, i, где x - значение, а i - позиция:
SELECT [4, 5, 6] AS l, [x FOR x, i IN l IF i != 2] filtered;
DuckDB предлагает две функции диапазона, range(start, stop, step) и generate_series(start, stop, step), и их варианты с аргументами по умолчанию для stop и step. Поведение обеих функций отличается в отношении аргумента stop. Это документировано ниже.
Функция range создаёт список значений в диапазоне между start и stop. Параметр start включительно, а параметр stop — исключительно. Значение по умолчанию для start — 0, а значение по умолчанию для step — 1.
В зависимости от количества аргументов существуют следующие варианты range.
Функция generate_series создаёт список значений в диапазоне между start и stop. Оба параметра start и stop включительно. Значение по умолчанию для start — 0, а значение по умолчанию для step — 1. В зависимости от количества аргументов существуют следующие варианты generate_series.
Для значений TIMESTAMP и TIMESTAMP WITH TIME ZONE также поддерживаются диапазоны дат. Обратите внимание, что для этих типов аргументы stop и step необходимо указывать явно (значение по умолчанию не предоставляется).
Функция list_aggregate позволяет выполнять произвольные существующие агрегатные функции над элементами списка. Её первый аргумент — список (колонка), а второй — имя агрегатной функции, например, min, histogram или sum.
list_aggregate принимает дополнительные аргументы после имени агрегатной функции. Эти дополнительные аргументы передаются непосредственно агрегатной функции, которая служит вторым аргументом list_aggregate.
Функция list_sort сортирует элементы списка в порядке возрастания или убывания. Кроме того, она позволяет указать, должны ли значения NULL перемещаться в начало или конец списка. Она имеет то же поведение при сортировке, что и ORDER BY в DuckDB. Поэтому (вложенные) значения сравниваются одинаково в list_sort и в ORDER BY.
По умолчанию, если не указано никаких модификаторов, DuckDB сортирует ASC NULLS FIRST. То есть, значения сортируются по возрастанию, а значения NULL ставятся первыми. Это идентично порядку сортировки по умолчанию в SQLite. Порядок сортировки по умолчанию может быть изменён с помощью PRAGMA операторов.
list_sort оставляет пользователю выбор между использованием порядка сортировки по умолчанию и настраиваемым порядком. list_sort принимает до двух дополнительных необязательных параметров. Второй параметр указывает порядок сортировки и может быть либо ASC или DESC. Третий параметр указывает порядок NULL и может быть либо NULLS FIRST или NULLS LAST.
Этот запрос использует порядок сортировки по умолчанию и порядок NULL по умолчанию.
SELECT list_sort([1, 3, NULL, 5, NULL, -5]);
[NULL, NULL, -5, 1, 3, 5]
Этот запрос указывает порядок сортировки. Порядок NULL использует настраиваемое значение по умолчанию.
SELECT list_sort([1, 3, NULL, 2], 'ASC');
[NULL, 1, 2, 3]
Этот запрос указывает как порядок сортировки, так и порядок NULL.
Функция flatten — это скалярная функция, которая преобразует список списков в один список, конкатенируя каждый вложенный список. Обратите внимание, что это разворачивает только один уровень вложенных списков, а не все уровни.
Преобразовать список списков в один список:
SELECT
flatten([
[1, 2],
[3, 4]
]);
[1, 2, 3, 4]
Если список имеет несколько уровней вложенных списков, только первый уровень подсписков объединяется в один список:
В общем случае, входными данными для функции flatten должен быть список списков (а не список одного уровня). Однако, поведение функции flatten имеет определенное поведение при обработке пустых списков и NULL значений.
Если входной список пуст, вернуть пустой список:
SELECT flatten([]);
[]
Если весь ввод для flatten является NULL, вернуть NULL:
SELECT flatten(NULL);
NULL
Если список, содержащий только элемент NULL, сгладить, вернуть пустой список:
SELECT flatten([NULL]);
[]
Если подсписок в списке списков содержит только NULL, не изменять подсписок:
-- (Note the extra set of parentheses vs. the prior example)
SELECT flatten([[NULL]]);
[NULL]
Даже если содержимое каждого подсписка состоит только из NULL, их всё равно объединяют. Обратите внимание, что при сглаживании не происходит удаление дубликатов. См. функцию list_distinct для удаления дубликатов:
Также существуют функции агрегированияlist и histogram, которые создают списки и списки структур. Функция unnest используется для раскрытия списка на один уровень.