Функции для списков
array_length()
| Описание |
Возвращает длину списка. |
| Использование |
|
Посмотреть пример
SELECT
array_length([1,2,3]) AS result_1,
array_length(['Tengri']) AS result_2,
array_length(split('Tengri', '')) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 3 | 1 | 6 |
+----------+----------+----------+
flatten()
| Описание |
Принимает вложенный список и возвращает список, сокращенный на один уровень вложения. |
| Использование |
|
Посмотреть пример
SELECT
flatten([[1, 2], [3, 4, 5]]) AS result_1,
flatten([[1], [2], [3], [4], [5]]) AS result_2;
+-------------+-------------+
| result_1 | result_2 |
+-------------+-------------+
| {1,2,3,4,5} | {1,2,3,4,5} |
+-------------+-------------+
list_aggregate()
| Описание |
Применяет заданную агрегатную функцию к заданному списку. |
| Использование |
|
| Псевдонимы |
|
Посмотреть пример
SELECT
list_aggregate([1, 2, 3], 'max') AS result_1,
list_aggregate([1, 2, 3], 'any_value') AS result_2,
list_aggregate(['I', 'love', 'Tengri'], 'string_agg', ' ') AS result_3;
+----------+----------+---------------+
| result_1 | result_2 | result_3 |
+----------+----------+---------------+
| 3 | 1 | I love Tengri |
+----------+----------+---------------+
list_concat()
| Описание |
Объединяет несколько списков в один. |
| Использование |
|
| Псевдонимы |
|
Пустые значения (NULL) игнорируются.
См. также Оператор ||.
Посмотреть пример
SELECT
list_concat([1,2,3], [4, 5]) AS result_1,
list_concat([1,2,3], NULL, [4, 5]) AS result_2,
list_concat(['T', 'e'], ['n', 'g', 'r'], ['i']) AS result_3;
+-------------+-------------+---------------+
| result_1 | result_2 | result_3 |
+-------------+-------------+---------------+
| {1,2,3,4,5} | {1,2,3,4,5} | {T,e,n,g,r,i} |
+-------------+-------------+---------------+
list_contains()
| Описание |
Проверяет, входит ли элемент в список. |
| Использование |
|
| Псевдонимы |
|
Посмотреть пример
SELECT
list_contains([1,2,3], 3) AS result_1,
list_contains([1,2,3, NULL], 3) AS result_2,
list_contains([1,2,3, NULL], NULL) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| true | true | null |
+----------+----------+----------+
list_cosine_distance()
| Описание |
Вычисляет косинусное расстояние между двумя списками (числовыми векторами). |
| Использование |
|
Посмотреть пример
SELECT
list_cosine_distance([1, 2, 3], [1, 2, 3]) AS result_1,
list_cosine_distance([1, 2, 3], [2, 4, 6]) AS result_2,
list_cosine_distance([1, 2, 3], [5, 1, 9]) AS result_3;
+----------+----------+---------------------+
| result_1 | result_2 | result_3 |
+----------+----------+---------------------+
| 0 | 0 | 0.12153793814103686 |
+----------+----------+---------------------+
list_cosine_similarity()
| Описание |
Вычисляет косинусную близость между двумя списками (числовыми векторами). |
| Использование |
|
Посмотреть пример
SELECT
list_cosine_similarity([1, 2, 3], [1, 2, 3]) AS result_1,
list_cosine_similarity([1, 2, 3], [2, 4, 6]) AS result_2,
list_cosine_similarity([1, 2, 3], [5, 1, 9]) AS result_3;
+----------+----------+--------------------+
| result_1 | result_2 | result_3 |
+----------+----------+--------------------+
| 1 | 1 | 0.8784620618589631 |
+----------+----------+--------------------+
list_distance()
| Описание |
Вычисляет евклидово расстояние между двумя точками, координаты которых заданы в виде списков. |
| Использование |
|
Вычисляет евклидово расстояние между двумя точками, координаты которых заданы в виде списков — числовых векторов равной длины.
Посмотреть пример
SELECT
list_distance([1, 2, 3], [1, 2, 3]) AS result_1,
list_distance([1, 2, 3], [1, 2, 4]) AS result_2,
list_distance([0, 0], [3, 4]) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 0 | 1 | 5 |
+----------+----------+----------+
list_distinct()
| Описание |
Удаляет из списка все дубликаты и пустые значения. |
| Использование |
|
Удаляет из списка все дубликаты и пустые значения. Не сохраняет исходный порядок элементов.
Посмотреть пример
SELECT
list_distinct([1, 2, 3, 1, 2, 3]) AS result_1,
list_distinct([1, 2, 3, NULL]) AS result_2,
list_distinct([NULL]) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| {3,2,1} | {3,2,1} | {} |
+----------+----------+----------+
list_extract()
| Описание |
Возвращает элемент из списка по индексу. |
| Использование |
|
| Псевдонимы |
|
Нумерация элементов начинается с 1.
|
Посмотреть пример
SELECT
list_extract(['A', 'B', 'C'], 1) AS result_1,
list_extract(['A', NULL, 'C'], 2) AS result_2,
list_extract(['A', 'B', 'C'], 5) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| A | null | null |
+----------+----------+----------+
list_grade_up()
| Описание |
Возвращает отсортированный список исходных индексов элементов списка. |
| Использование |
|
| Псевдонимы |
|
Нумерация элементов начинается с 1.
|
Посмотреть пример
SELECT
list_grade_up([3, 2, 1, 0]) AS result_1,
list_grade_up(['C', 'A', 'B']) AS result_1,
list_grade_up([1, NULL, 2]) AS result_3;
+-----------+----------+----------+
| result_1 | result_1 | result_3 |
+-----------+----------+----------+
| {4,3,2,1} | {2,3,1} | {1,3,2} |
+-----------+----------+----------+
list_has_all()
| Описание |
Проверяет, что все элементы второго списка содержатся в первом списке. |
| Использование |
|
| Псевдонимы |
|
Посмотреть пример
SELECT
list_has_all([1, 2, 3], [1, 2]) AS result_1,
list_has_all([1, 2, 3], [1, 2, NULL]) AS result_2,
list_has_all([1, 2, 3], [1, 2, 3, 4]) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| true | true | false |
+----------+----------+----------+
list_has_any()
| Описание |
Проверяет, есть ли у двух списков хотя бы один общий элемент. |
| Использование |
|
| Псевдонимы |
|
Посмотреть пример
SELECT
list_has_any([1, 2, 3], [1, 4]) AS result_1,
list_has_any([1, 2, 3], [1, 2, NULL]) AS result_2,
list_has_any([1, 2, 3], [4]) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| true | true | false |
+----------+----------+----------+
list_inner_product()
| Описание |
Вычисляет скалярное произведение двух числовых векторов равной длины. |
| Использование |
|
| Псевдонимы |
|
Посмотреть пример
SELECT
list_inner_product([1, 2], [1, 2]) AS result_1,
list_inner_product([1, -2], [-1, 2]) AS result_2,
list_inner_product([1, 2, 3], [0, 0, 0]) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 5 | -5 | 0 |
+----------+----------+----------+
list_negative_inner_product()
| Описание |
Вычисляет скалярное произведение двух числовых векторов равной длины, умноженное на |
| Использование |
|
| Псевдонимы |
|
Посмотреть пример
SELECT
list_negative_inner_product([1, 2], [1, 2]) AS result_1,
list_negative_inner_product([1, -2], [-1, 2]) AS result_2,
list_negative_inner_product([1, 2, 3], [0, 0, 0]) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| -5 | 5 | 0 |
+----------+----------+----------+
list_position()
| Описание |
Возвращает индекс элемента в спике. |
| Использование |
|
| Псевдонимы |
|
Возвращает индекс элемента в спике. Если элемент не найден, возвращает NULL. Если вхождений более одного, возвращает индекс первого вхождения.
Посмотреть пример
SELECT
list_position(['A', 'B', 'C'], 'B') AS result_1,
list_position(['A', 'B', 'C'], 'X') AS result_2,
list_position(['A', 'B', 'A', 'C'], 'A') AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 2 | null | 1 |
+----------+----------+----------+
list_resize()
| Описание |
Изменяет длину списка до указанного размера. |
| Использование |
|
| Псевдонимы |
|
Изменяет длину списка до указанного размера. Если указанный размер больше текущего, дополняет список значениями из value или значениями NULL, если value не задано. Если указанный размер меньше текущего, удаляет элементы с правого конца.
Посмотреть пример
SELECT
list_resize(['A', 'B', 'C'], 2) AS result_1,
list_resize(['A', 'B', 'C'], 4) AS result_2,
list_resize(['A', 'B', 'C'], 5, 'X') AS result_3;
+----------+--------------+-------------+
| result_1 | result_2 | result_3 |
+----------+--------------+-------------+
| {A,B} | {A,B,C,null} | {A,B,C,X,X} |
+----------+--------------+-------------+
list_reverse_sort()
| Описание |
Сортирует список в порядке убывания. |
| Использование |
|
| Псевдонимы |
|
В параметре null_order можно задать расположение значений NULL после сортировки:
-
NULLS FIRST— значенияNULLв начале -
NULLS LAST— значенияNULLв конце (по умолчанию)
Посмотреть пример
SELECT
list_reverse_sort([1, 3, 2]) AS result_1,
list_reverse_sort([1, 3, NULL, 2]) AS result_2,
list_reverse_sort([1, 3, NULL, 2], 'NULLS FIRST') AS result_3;
+----------+--------------+--------------+
| result_1 | result_2 | result_3 |
+----------+--------------+--------------+
| {3,2,1} | {3,2,1,None} | {None,3,2,1} |
+----------+--------------+--------------+
list_select()
| Описание |
Возвращает список элементов исходного списка по их индексам. |
| Использование |
|
| Псевдонимы |
|
Нумерация элементов начинается с 1.
|
Посмотреть пример
SELECT
list_select([4, 5, 6], [1, 3]) AS result_1,
list_select([4, 5, 6], [1, 3, 4]) AS result_2,
list_select([4, 5, 6, NULL], [1, 3, 4]) AS result_3;
+----------+------------+------------+
| result_1 | result_2 | result_3 |
+----------+------------+------------+
| {4,6} | {4,6,None} | {4,6,None} |
+----------+------------+------------+
list_sort()
| Описание |
Сортирует список. |
| Использование |
|
| Псевдонимы |
|
В параметре sort_order можно задать порядок сортировки:
-
ASC-- по возрастанию (по умолчанию) -
DESC— по убыванию
В параметре null_order можно задать расположение значений NULL после сортировки:
-
NULLS FIRST— значенияNULLв начале -
NULLS LAST— значенияNULLв конце (по умолчанию)
Второй параметр можно задать, только если задан первый.
Посмотреть пример
SELECT
list_sort([1, 3, 2]) AS result_1,
list_sort([1, 3, NULL, 2], 'DESC') AS result_2,
list_sort([1, 3, NULL, 2], 'DESC', 'NULLS FIRST') AS result_3;
+----------+--------------+--------------+
| result_1 | result_2 | result_3 |
+----------+--------------+--------------+
| {1,2,3} | {3,2,1,None} | {None,3,2,1} |
+----------+--------------+--------------+
list_unique()
| Описание |
Вычисляет количество уникальных элементов в списке. |
| Использование |
|
| Псевдонимы |
|
Посмотреть пример
SELECT
list_unique(['A', 'B', 'A']) AS result_1,
list_unique(['A', 'B', 'A', NULL]) AS result_2,
list_unique(['A', NULL, NULL]) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 2 | 2 | 1 |
+----------+----------+----------+
list_value()
| Описание |
Создает список из переданных аргументов. |
| Использование |
|
| Псевдонимы |
|
Посмотреть пример
SELECT
list_value(1, 2, 3) AS result_1,
list_value(1) AS result_2,
list_value(1, 2, 3, NULL) AS result_3;
+----------+----------+--------------+
| result_1 | result_2 | result_3 |
+----------+----------+--------------+
| {1,2,3} | {1} | {1,2,3,None} |
+----------+----------+--------------+
list_where()
| Описание |
Фильтрует список по списку логических флагов. |
| Использование |
|
| Псевдонимы |
|
Посмотреть пример
SELECT
list_where([1, 2, 3], [true, false, true]) AS result_1,
list_where([1, 2, 3, 4], [true, false, true]) AS result_2,
list_where([1, 2, 3], [true, false, true, false]) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| {1,3} | {1,3} | {1,3} |
+----------+----------+----------+
list_zip()
| Описание |
Объединяет списки в новый список, длина которого равна длине самого длинного списка. |
| Использование |
|
| Псевдонимы |
|
Объединяет n списков в новый список, длина которого равна длине самого длинного списка. Его элементами являются структуры из n элементов из каждого списка. Отсутствующие элементы заменяются значением NULL.
Если задан параметр truncate (через значение TRUE), все списки усекаются до длины наименьшего списка.
Посмотреть пример
SELECT
list_zip(['A', 'B', 'C'], ['1', '2', '3']) AS result_1,
list_zip(['A', 'B'], ['1', '2', '3']) AS result_2,
list_zip(['A', 'B'], ['1', '2', '3'], true) AS result_3;
+------------------------------------+-------------------------------------+-------------------------+
| result_1 | result_2 | result_3 |
+------------------------------------+-------------------------------------+-------------------------+
| {['A', '1'],['B', '2'],['C', '3']} | {['A', '1'],['B', '2'],[None, '3']} | {['A', '1'],['B', '2']} |
+------------------------------------+-------------------------------------+-------------------------+
range()
| Описание |
Генерирует список последовательных чисел в заданном диапазоне. |
| Использование |
|
Конечная граница (stop) не включается в результат.
Если параметр start`не указан, то последовательность начинается с `0.
В параметре step можно указать шаг последовательности.
Посмотреть пример
SELECT
range(10) AS result_1,
range(5, 10) AS result_2,
range(5, 10, 2) AS result_3;
+-----------------------+-------------+----------+
| result_1 | result_2 | result_3 |
+-----------------------+-------------+----------+
| {0,1,2,3,4,5,6,7,8,9} | {5,6,7,8,9} | {5,7,9} |
+-----------------------+-------------+----------+