| 函数 |
描述 |
list[index] |
使用(从 1 开始的)index 提取单个列表元素。 |
list[begin[:end][:step]] |
使用切片约定提取子列表。支持负数索引。 |
list1 && list2 |
list_has_any 的别名。 |
list1 <-> list2 |
list_distance 的别名。 |
list1 <=> list2 |
list_cosine_distance 的别名。 |
list1 <@ list2 |
list_has_all 的别名。 |
list1 @> list2 |
list_has_all 的别名。 |
arg1 || arg2 |
连接两个字符串、列表或 BLOB。任何 NULL 输入都会导致结果为 NULL。另请参阅 concat(arg1, arg2, ...) 和 list_concat(list1, list2, ...)。 |
aggregate(list, function_name, ...) |
list_aggregate 的别名。 |
apply(list, lambda(x)) |
list_transform 的别名。 |
array_aggr(list, function_name, ...) |
list_aggregate 的别名。 |
array_aggregate(list, function_name, ...) |
list_aggregate 的别名。 |
array_append(list, element) |
list_append 的别名。 |
array_apply(list, lambda(x)) |
list_transform 的别名。 |
array_cat(list_1, ..., list_n) |
list_concat 的别名。 |
array_concat(list_1, ..., list_n) |
list_concat 的别名。 |
array_contains(list, element) |
list_contains 的别名。 |
array_distinct(list) |
list_distinct 的别名。 |
array_extract(list, index) |
从 list 中提取第 index 个(从 1 开始)值。 |
array_filter(list, lambda(x)) |
list_filter 的别名。 |
array_grade_up(list[, col1][, col2]) |
list_grade_up 的别名。 |
array_has(list, element) |
list_contains 的别名。 |
array_has_all(list1, list2) |
list_has_all 的别名。 |
array_has_any(list1, list2) |
list_has_any 的别名。 |
array_indexof(list, element) |
list_position 的别名。 |
array_intersect(list1, list2) |
list_intersect 的别名。 |
array_length(list) |
length 的别名。 |
array_pop_back(list) |
返回移除最后一个元素后的 list。 |
array_pop_front(list) |
返回移除第一个元素后的 list。 |
array_position(list, element) |
list_position 的别名。 |
array_prepend(element, list) |
list_prepend 的别名。 |
array_push_back(list, element) |
list_append 的别名。 |
array_push_front(list, element) |
将 element 添加到 list 的开头。 |
array_reduce(list, lambda(x,y)[, initial_value]) |
list_reduce 的别名。 |
array_resize(list, size[[, value]]) |
list_resize 的别名。 |
array_reverse(list) |
list_reverse 的别名。 |
array_reverse_sort(list[, col1]) |
list_reverse_sort 的别名。 |
array_select(value_list, index_list) |
list_select 的别名。 |
array_slice(list, begin, end) |
list_slice 的别名。 |
array_slice(list, begin, end, step) |
list_slice 的别名。 |
array_sort(list[, col1][, col2]) |
list_sort 的别名。 |
array_to_string(list, delimiter) |
使用可选的 delimiter 连接列表/数组元素。 |
array_to_string_comma_default(array) |
使用逗号分隔符连接列表/数组元素。 |
array_transform(list, lambda(x)) |
list_transform 的别名。 |
array_unique(list) |
list_unique 的别名。 |
array_where(value_list, mask_list) |
list_where 的别名。 |
array_zip(list_1, ..., list_n[, truncate]) |
list_zip 的别名。 |
char_length(list) |
length 的别名。 |
character_length(list) |
length 的别名。 |
concat(value, ...) |
连接多个字符串或列表。NULL 输入会被跳过。另请参阅 运算符 ||。 |
contains(list, element) |
如果 list 包含 element,则返回 true。 |
filter(list, lambda(x)) |
list_filter 的别名。 |
flatten(nested_list) |
展平嵌套列表一级。 |
generate_series(start[, stop][, step]) |
创建 start 和 stop 之间的值列表——包含 stop 参数。 |
grade_up(list[, col1][, col2]) |
list_grade_up 的别名。 |
len(list) |
length 的别名。 |
length(list) |
返回 list 的长度。 |
list_aggr(list, function_name, ...) |
list_aggregate 的别名。 |
list_aggregate(list, function_name, ...) |
对 list 中的元素执行聚合函数 function_name。有关详细信息,请参阅“列表聚合”部分。 |
list_any_value(list) |
将聚合函数 any_value 应用于 list。 |
list_append(list, element) |
将 element 追加到 list 中。 |
list_apply(list, lambda(x)) |
list_transform 的别名。 |
list_approx_count_distinct(list) |
将聚合函数 approx_count_distinct 应用于 list。 |
list_avg(list) |
将聚合函数 avg 应用于 list。 |
list_bit_and(list) |
将聚合函数 bit_and 应用于 list。 |
list_bit_or(list) |
将聚合函数 bit_or 应用于 list。 |
list_bit_xor(list) |
将聚合函数 bit_xor 应用于 list。 |
list_bool_and(list) |
将聚合函数 bool_and 应用于 list。 |
list_bool_or(list) |
将聚合函数 bool_or 应用于 list。 |
list_cat(list_1, ..., list_n) |
list_concat 的别名。 |
list_concat(list_1, ..., list_n) |
连接列表。NULL 输入会被跳过。另请参阅 运算符 ||。 |
list_contains(list, element) |
如果列表包含元素,则返回 true。 |
list_cosine_distance(list1, list2) |
计算两个等长列表之间的余弦距离。 |
list_cosine_similarity(list1, list2) |
计算两个等长列表之间的余弦相似度。 |
list_count(list) |
将聚合函数 count 应用于 list。 |
list_distance(list1, list2) |
计算两个等长列表坐标点之间的欧几里得距离。 |
list_distinct(list) |
从列表中移除所有重复项和 NULL 值。不保留原始顺序。 |
list_dot_product(list1, list2) |
list_inner_product 的别名。 |
list_element(list, index) |
list_extract 的别名。 |
list_entropy(list) |
将聚合函数 entropy 应用于 list。 |
list_extract(list, index) |
从列表中提取第 index 个(从 1 开始)值。 |
list_filter(list, lambda(x)) |
从输入 list 中构造一个列表,其中包含使 lambda 函数返回 true 的元素。DuckDB 必须能够将 lambda 函数的返回类型转换为 BOOL。 list_filter 的返回类型与输入列表相同。请参阅 list_filter 示例。 |
list_first(list) |
将聚合函数 first 应用于 list。 |
list_grade_up(list[, col1][, col2]) |
类似于 list_sort,但结果是对应于原始列表中位置的索引,而不是实际值。 |
list_has(list, element) |
list_contains 的别名。 |
list_has_all(list1, list2) |
如果 list2 的所有元素都在 list1 中,则返回 true。NULL 值会被忽略。 |
list_has_any(list1, list2) |
如果列表有任何公共元素,则返回 true。NULL 值会被忽略。 |
list_histogram(list) |
将聚合函数 histogram 应用于 list。 |
list_indexof(list, element) |
list_position 的别名。 |
list_inner_product(list1, list2) |
计算两个等长列表之间的内积。 |
list_intersect(list1, list2) |
返回一个包含 list1 和 list2 中共同存在的所有元素(无重复项)的列表。 |
list_kurtosis(list) |
将聚合函数 kurtosis 应用于 list。 |
list_kurtosis_pop(list) |
将聚合函数 kurtosis_pop 应用于 list。 |
list_last(list) |
将聚合函数 last 应用于 list。 |
list_mad(list) |
将聚合函数 mad 应用于 list。 |
list_max(list) |
将聚合函数 max 应用于 list。 |
list_median(list) |
将聚合函数 median 应用于 list。 |
list_min(list) |
将聚合函数 min 应用于 list。 |
list_mode(list) |
将聚合函数 mode 应用于 list。 |
list_negative_dot_product(list1, list2) |
list_negative_inner_product 的别名。 |
list_negative_inner_product(list1, list2) |
计算两个等长列表之间的负内积。 |
list_pack(arg, ...) |
list_value 的别名。 |
list_position(list, element) |
如果 list 包含该 element,则返回其索引。如果未找到该元素,则返回 NULL。 |
list_prepend(element, list) |
将 element 添加到 list 的开头。 |
list_product(list) |
将聚合函数 product 应用于 list。 |
list_reduce(list, lambda(x,y)[, initial_value]) |
通过对运行结果和下一个列表元素执行 lambda 函数,将输入 list 的所有元素归约为单个标量值。lambda 函数有一个可选的 initial_value 参数。请参阅 list_reduce 示例。 |
list_resize(list, size[[, value]]) |
将 list 调整为包含 size 个元素。使用 value 初始化新元素;如果未设置 value,则使用 NULL 初始化。 |
list_reverse(list) |
反转 list。 |
list_reverse_sort(list[, col1]) |
以反向顺序对列表元素进行排序。有关排序顺序和 NULL 值的更多详细信息,请参阅“排序列表”部分。 |
list_select(value_list, index_list) |
返回基于 index_list 选择的元素组成的列表。 |
list_sem(list) |
将聚合函数 sem 应用于 list。 |
list_skewness(list) |
将聚合函数 skewness 应用于 list。 |
list_slice(list, begin, end) |
使用切片约定提取子列表或子字符串。支持负数。 |
list_slice(list, begin, end, step) |
带有额外步长功能的 list_slice。 |
list_sort(list[, col1][, col2]) |
对列表元素进行排序。有关排序顺序和 NULL 值的更多详细信息,请参阅“排序列表”部分。 |
list_stddev_pop(list) |
将聚合函数 stddev_pop 应用于 list。 |
list_stddev_samp(list) |
将聚合函数 stddev_samp 应用于 list。 |
list_string_agg(list) |
将聚合函数 string_agg 应用于 list。 |
list_sum(list) |
将聚合函数 sum 应用于 list。 |
list_transform(list, lambda(x)) |
返回一个通过将 lambda 函数应用于输入 list 的每个元素而产生的列表。返回类型由 lambda 函数的返回类型定义。请参阅 list_transform 示例。 |
list_unique(list) |
计算 list 中唯一元素的数量。 |
list_value(arg, ...) |
创建一个包含参数值的 LIST。 |
list_var_pop(list) |
将聚合函数 var_pop 应用于 list。 |
list_var_samp(list) |
将聚合函数 var_samp 应用于 list。 |
list_where(value_list, mask_list) |
返回一个列表,该列表将 mask_list 中的 BOOLEAN 值作为掩码应用于 value_list。 |
list_zip(list_1, ..., list_n[, truncate]) |
将 n 个 LIST 压缩为新的 LIST,其长度将为最长列表的长度。其元素是来自每个列表 list_1, ..., list_n 的 n 个元素组成的结构体;缺失的元素将被替换为 NULL。如果设置了 truncate,则所有列表都将被截断为最短列表的长度。 |
range(start[, stop][, step]) |
创建 start 和 stop 之间的值列表——stop 参数不包含在内。 |
reduce(list, lambda(x,y)[, initial_value]) |
list_reduce 的别名。 |
repeat(list, count) |
将 list 重复 count 次。 |
unnest(list) |
将列表取消嵌套一级。请注意,这是一个会改变结果基数的特殊函数。更多详细信息请参阅 unnest 页面。 |
unpivot_list(arg, ...) |
与 list_value 相同,但作为 unpivot 的一部分生成,以便提供更好的错误消息。 |
| 描述 |
使用(从 1 开始的)index 提取单个列表元素。 |
| 示例 |
[4, 5, 6][3] |
| 结果 |
6 |
| 别名 |
list_extract |
| 描述 |
使用切片约定提取子列表。支持负数索引。 |
| 示例 |
[4, 5, 6][3] |
| 结果 |
6 |
| 别名 |
list_slice |
| 描述 |
连接两个字符串、列表或 BLOB。任何 NULL 输入都会导致结果为 NULL。另请参阅 concat(arg1, arg2, ...) 和 list_concat(list1, list2, ...)。 |
| 示例 1 |
'Duck' || 'DB' |
| 结果 |
DuckDB |
| 示例 2 |
[1, 2, 3] || [4, 5, 6] |
| 结果 |
[1, 2, 3, 4, 5, 6] |
| 示例 3 |
'\xAA'::BLOB || '\xBB'::BLOB |
| 结果 |
\xAA\xBB |
| 描述 |
从 list 中提取第 index 个(从 1 开始)值。 |
| 示例 |
array_extract([4, 5, 6], 3) |
| 结果 |
6 |
| 描述 |
返回移除最后一个元素后的 list。 |
| 示例 |
array_pop_back([4, 5, 6]) |
| 结果 |
[4, 5] |
| 描述 |
返回移除第一个元素后的 list。 |
| 示例 |
array_pop_front([4, 5, 6]) |
| 结果 |
[5, 6] |
| 描述 |
将 element 添加到 list 的开头。 |
| 示例 |
array_push_front([4, 5, 6], 3) |
| 结果 |
[3, 4, 5, 6] |
| 描述 |
使用可选的 delimiter 连接列表/数组元素。 |
| 示例 1 |
array_to_string([1, 2, 3], '-') |
| 结果 |
1-2-3 |
| 示例 2 |
array_to_string(['aa', 'bb', 'cc'], '') |
| 结果 |
aabbcc |
| 描述 |
使用逗号分隔符连接列表/数组元素。 |
| 示例 |
array_to_string_comma_default(['Banana', 'Apple', 'Melon']) |
| 结果 |
Banana,Apple,Melon |
| 描述 |
连接多个字符串或列表。NULL 输入会被跳过。另请参阅 运算符 ||。 |
| 示例 1 |
concat('Hello', ' ', 'World') |
| 结果 |
Hello World |
| 示例 2 |
concat([1, 2, 3], NULL, [4, 5, 6]) |
| 结果 |
[1, 2, 3, 4, 5, 6] |
| 描述 |
如果 list 包含 element,则返回 true。 |
| 示例 |
contains([1, 2, NULL], 1) |
| 结果 |
true |
| 描述 |
展平嵌套列表一级。 |
| 示例 |
flatten([[1, 2, 3], [4, 5]]) |
| 结果 |
[1, 2, 3, 4, 5] |
| 描述 |
创建 start 和 stop 之间的值列表——包含 stop 参数。 |
| 示例 |
generate_series(2, 5, 3) |
| 结果 |
[2, 5] |
| 描述 |
返回 list 的长度。 |
| 示例 |
length([1,2,3]) |
| 结果 |
3 |
| 别名 |
char_length, character_length, len |
| 描述 |
对 list 中的元素执行聚合函数 function_name。有关详细信息,请参阅“列表聚合”部分。 |
| 示例 |
list_aggregate([1, 2, NULL], 'min') |
| 结果 |
1 |
| 别名 |
aggregate, array_aggr, array_aggregate, list_aggr |
| 描述 |
将聚合函数 any_value 应用于 list。 |
| 示例 |
list_any_value([3,3,9]) |
| 结果 |
3 |
| 描述 |
将 element 追加到 list 中。 |
| 示例 |
list_append([2, 3], 4) |
| 结果 |
[2, 3, 4] |
| 别名 |
array_append, array_push_back |
| 描述 |
将聚合函数 avg 应用于 list。 |
| 示例 |
list_avg([3,3,9]) |
| 结果 |
5.0 |
| 描述 |
将聚合函数 bit_and 应用于 list。 |
| 示例 |
list_bit_and([3,3,9]) |
| 结果 |
1 |
| 描述 |
将聚合函数 bit_or 应用于 list。 |
| 示例 |
list_bit_or([3,3,9]) |
| 结果 |
11 |
| 描述 |
将聚合函数 bit_xor 应用于 list。 |
| 示例 |
list_bit_xor([3,3,9]) |
| 结果 |
9 |
| 描述 |
将聚合函数 bool_and 应用于 list。 |
| 示例 |
list_bool_and([true, false]) |
| 结果 |
false |
| 描述 |
将聚合函数 bool_or 应用于 list。 |
| 示例 |
list_bool_or([true, false]) |
| 结果 |
true |
| 描述 |
连接列表。NULL 输入会被跳过。另请参阅 运算符 ||。 |
| 示例 |
list_concat([2, 3], [4, 5, 6], [7]) |
| 结果 |
[2, 3, 4, 5, 6, 7] |
| 别名 |
list_cat, array_concat, array_cat |
| 描述 |
如果列表包含元素,则返回 true。 |
| 示例 |
list_contains([1, 2, NULL], 1) |
| 结果 |
true |
| 别名 |
array_contains, array_has, list_has |
| 描述 |
计算两个等长列表之间的余弦距离。 |
| 示例 |
list_cosine_distance([1, 2, 3], [1, 2, 3]) |
| 结果 |
0.0 |
| 别名 |
<=> |
| 描述 |
计算两个等长列表之间的余弦相似度。 |
| 示例 |
list_cosine_similarity([1, 2, 3], [1, 2, 3]) |
| 结果 |
1.0 |
| 描述 |
将聚合函数 count 应用于 list。 |
| 示例 |
list_count([3,3,9]) |
| 结果 |
3 |
| 描述 |
计算两个等长列表坐标点之间的欧几里得距离。 |
| 示例 |
list_distance([1, 2, 3], [1, 2, 5]) |
| 结果 |
2.0 |
| 别名 |
<-> |
| 描述 |
从列表中移除所有重复项和 NULL 值。不保留原始顺序。 |
| 示例 |
list_distinct([1, 1, NULL, -3, 1, 5]) |
| 结果 |
[5, -3, 1] |
| 别名 |
array_distinct |
| 描述 |
将聚合函数 entropy 应用于 list。 |
| 示例 |
list_entropy([3,3,9]) |
| 结果 |
0.9182958340544893 |
| 描述 |
从列表中提取第 index 个(从 1 开始)值。 |
| 示例 |
list_extract([4, 5, 6], 3) |
| 结果 |
6 |
| 别名 |
list_element |
| 描述 |
从输入 list 中构造一个列表,其中包含使 lambda 函数返回 true 的元素。DuckDB 必须能够将 lambda 函数的返回类型转换为 BOOL。 list_filter 的返回类型与输入列表相同。请参阅 list_filter 示例。 |
| 示例 |
list_filter([3, 4, 5], lambda x : x > 4) |
| 结果 |
[5] |
| 别名 |
array_filter, filter |
| 描述 |
将聚合函数 first 应用于 list。 |
| 示例 |
list_first([3,3,9]) |
| 结果 |
3 |
| 描述 |
类似于 list_sort,但结果是对应于原始列表中位置的索引,而不是实际值。 |
| 示例 |
list_grade_up([3, 6, 1, 2]) |
| 结果 |
[3, 4, 1, 2] |
| 别名 |
array_grade_up, grade_up |
| 描述 |
如果 list2 的所有元素都在 list1 中,则返回 true。NULL 值会被忽略。 |
| 示例 |
list_has_all([1, 2, 3], [2, 3]) |
| 结果 |
true |
| 别名 |
<@, @>, array_has_all |
| 描述 |
如果列表有任何公共元素,则返回 true。NULL 值会被忽略。 |
| 示例 |
list_has_any([1, 2, 3], [2, 3, 4]) |
| 结果 |
true |
| 别名 |
&&, array_has_any |
| 描述 |
将聚合函数 histogram 应用于 list。 |
| 示例 |
list_histogram([3,3,9]) |
| 结果 |
{3=2, 9=1} |
| 描述 |
计算两个等长列表之间的内积。 |
| 示例 |
list_inner_product([1, 2, 3], [1, 2, 3]) |
| 结果 |
14.0 |
| 别名 |
list_dot_product |
| 描述 |
返回一个包含 list1 和 list2 中共同存在的所有元素(无重复项)的列表。 |
| 示例 |
list_intersect([1, 2, 3], [2, 3, 4]) |
| 结果 |
[3, 2] |
| 别名 |
array_intersect |
| 描述 |
将聚合函数 kurtosis 应用于 list。 |
| 示例 |
list_kurtosis([3,3,9]) |
| 结果 |
NULL |
| 描述 |
将聚合函数 kurtosis_pop 应用于 list。 |
| 示例 |
list_kurtosis_pop([3,3,9]) |
| 结果 |
-1.4999999999999978 |
| 描述 |
将聚合函数 last 应用于 list。 |
| 示例 |
list_last([3,3,9]) |
| 结果 |
9 |
| 描述 |
将聚合函数 mad 应用于 list。 |
| 示例 |
list_mad([3,3,9]) |
| 结果 |
0.0 |
| 描述 |
将聚合函数 max 应用于 list。 |
| 示例 |
list_max([3,3,9]) |
| 结果 |
9 |
| 描述 |
将聚合函数 median 应用于 list。 |
| 示例 |
list_median([3,3,9]) |
| 结果 |
3.0 |
| 描述 |
将聚合函数 min 应用于 list。 |
| 示例 |
list_min([3,3,9]) |
| 结果 |
3 |
| 描述 |
将聚合函数 mode 应用于 list。 |
| 示例 |
list_mode([3,3,9]) |
| 结果 |
3 |
| 描述 |
计算两个等长列表之间的负内积。 |
| 示例 |
list_negative_inner_product([1, 2, 3], [1, 2, 3]) |
| 结果 |
-14.0 |
| 别名 |
list_negative_dot_product |
| 描述 |
如果 list 包含该 element,则返回其索引。如果未找到该元素,则返回 NULL。 |
| 示例 |
list_position([1, 2, NULL], 2) |
| 结果 |
2 |
| 别名 |
array_indexof, array_position, list_indexof |
| 描述 |
将 element 添加到 list 的开头。 |
| 示例 |
list_prepend(3, [4, 5, 6]) |
| 结果 |
[3, 4, 5, 6] |
| 别名 |
array_prepend |
| 描述 |
将聚合函数 product 应用于 list。 |
| 示例 |
list_product([3,3,9]) |
| 结果 |
81.0 |
| 描述 |
通过对运行结果和下一个列表元素执行 lambda 函数,将输入 list 的所有元素归约为单个标量值。lambda 函数有一个可选的 initial_value 参数。请参阅 list_reduce 示例。 |
| 示例 |
list_reduce([1, 2, 3], lambda x, y : x + y) |
| 结果 |
6 |
| 别名 |
array_reduce, reduce |
| 描述 |
将 list 调整为包含 size 个元素。使用 value 初始化新元素;如果未设置 value,则使用 NULL 初始化。 |
| 示例 |
list_resize([1, 2, 3], 5, 0) |
| 结果 |
[1, 2, 3, 0, 0] |
| 别名 |
array_resize |
| 描述 |
反转 list。 |
| 示例 |
list_reverse([3, 6, 1, 2]) |
| 结果 |
[2, 1, 6, 3] |
| 别名 |
array_reverse |
| 描述 |
以反向顺序对列表元素进行排序。有关排序顺序和 NULL 值的更多详细信息,请参阅“排序列表”部分。 |
| 示例 |
list_reverse_sort([3, 6, 1, 2]) |
| 结果 |
[6, 3, 2, 1] |
| 别名 |
array_reverse_sort |
| 描述 |
返回基于 index_list 选择的元素组成的列表。 |
| 示例 |
list_select([10, 20, 30, 40], [1, 4]) |
| 结果 |
[10, 40] |
| 别名 |
array_select |
| 描述 |
将聚合函数 sem 应用于 list。 |
| 示例 |
list_sem([3,3,9]) |
| 结果 |
1.6329931618554523 |
| 描述 |
将聚合函数 skewness 应用于 list。 |
| 示例 |
list_skewness([3,3,9]) |
| 结果 |
1.7320508075688796 |
| 描述 |
使用切片约定提取子列表或子字符串。支持负数。 |
| 示例 |
list_slice([4, 5, 6], 2, 3) |
| 结果 |
[5, 6] |
| 别名 |
array_slice |
| 描述 |
带有额外步长功能的 list_slice。 |
| 示例 |
list_slice([4, 5, 6], 1, 3, 2) |
| 结果 |
[4, 6] |
| 别名 |
array_slice |
| 描述 |
对列表元素进行排序。有关排序顺序和 NULL 值的更多详细信息,请参阅“排序列表”部分。 |
| 示例 |
list_sort([3, 6, 1, 2]) |
| 结果 |
[1, 2, 3, 6] |
| 别名 |
array_sort |
| 描述 |
将聚合函数 stddev_pop 应用于 list。 |
| 示例 |
list_stddev_pop([3,3,9]) |
| 结果 |
2.8284271247461903 |
| 描述 |
将聚合函数 stddev_samp 应用于 list。 |
| 示例 |
list_stddev_samp([3,3,9]) |
| 结果 |
3.4641016151377544 |
| 描述 |
将聚合函数 string_agg 应用于 list。 |
| 示例 |
list_string_agg([3,3,9]) |
| 结果 |
3,3,9 |
| 描述 |
将聚合函数 sum 应用于 list。 |
| 示例 |
list_sum([3,3,9]) |
| 结果 |
15 |
| 描述 |
返回一个通过将 lambda 函数应用于输入 list 的每个元素而产生的列表。返回类型由 lambda 函数的返回类型定义。请参阅 list_transform 示例。 |
| 示例 |
list_transform([1, 2, 3], lambda x : x + 1) |
| 结果 |
[2, 3, 4] |
| 别名 |
apply, array_apply, array_transform, list_apply |
| 描述 |
计算 list 中唯一元素的数量。 |
| 示例 |
list_unique([1, 1, NULL, -3, 1, 5]) |
| 结果 |
3 |
| 别名 |
array_unique |
| 描述 |
创建一个包含参数值的 LIST。 |
| 示例 |
list_value(4, 5, 6) |
| 结果 |
[4, 5, 6] |
| 别名 |
list_pack |
| 描述 |
将聚合函数 var_pop 应用于 list。 |
| 示例 |
list_var_pop([3,3,9]) |
| 结果 |
8.0 |
| 描述 |
将聚合函数 var_samp 应用于 list。 |
| 示例 |
list_var_samp([3,3,9]) |
| 结果 |
12.0 |
| 描述 |
返回一个列表,该列表将 mask_list 中的 BOOLEAN 值作为掩码应用于 value_list。 |
| 示例 |
list_where([10, 20, 30, 40], [true, false, false, true]) |
| 结果 |
[10, 40] |
| 别名 |
array_where |
| 描述 |
将 n 个 LIST 压缩为新的 LIST,其长度将为最长列表的长度。其元素是来自每个列表 list_1, ..., list_n 的 n 个元素组成的结构体;缺失的元素将被替换为 NULL。如果设置了 truncate,则所有列表都将被截断为最短列表的长度。 |
| 示例 1 |
list_zip([1, 2], [3, 4], [5, 6]) |
| 结果 |
[(1, 3, 5), (2, 4, 6)] |
| 示例 2 |
list_zip([1, 2], [3, 4], [5, 6, 7]) |
| 结果 |
[(1, 3, 5), (2, 4, 6), (NULL, NULL, 7)] |
| 示例 3 |
list_zip([1, 2], [3, 4], [5, 6, 7], true) |
| 结果 |
[(1, 3, 5), (2, 4, 6)] |
| 别名 |
array_zip |
| 描述 |
创建 start 和 stop 之间的值列表——stop 参数不包含在内。 |
| 示例 |
range(2, 5, 3) |
| 结果 |
[2] |
| 描述 |
将 list 重复 count 次。 |
| 示例 |
repeat([1, 2, 3], 5) |
| 结果 |
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3] |
| 描述 |
将列表取消嵌套一级。请注意,这是一个会改变结果基数的特殊函数。更多详细信息请参阅 unnest 页面。 |
| 示例 |
unnest([1, 2, 3]) |
| 结果 |
多行:'1', '2', '3' |
| 描述 |
与 list_value 相同,但作为 unpivot 的一部分生成,以便提供更好的错误消息。 |
| 示例 |
unpivot_list(4, 5, 6) |
| 结果 |
[4, 5, 6] |
列表支持以下运算符
| 运算符 |
描述 |
示例 |
结果 |
&& |
list_has_any 的别名。 |
[1, 2, 3, 4, 5] && [2, 5, 5, 6] |
true |
@> |
list_has_all 的别名,其中运算符右侧的列表为子列表。 |
[1, 2, 3, 4] @> [3, 4, 3] |
true |
<@ |
list_has_all 的别名,其中运算符左侧的列表为子列表。 |
[1, 4] <@ [1, 2, 3, 4] |
true |
|| |
类似于 list_concat,不同之处在于任何 NULL 输入都会导致结果为 NULL。 |
[1, 2, 3] || [4, 5, 6] |
[1, 2, 3, 4, 5, 6] |
<=> |
list_cosine_distance 的别名。 |
[1, 2, 3] <=> [1, 2, 5] |
0.007416606 |
<-> |
list_distance 的别名。 |
[1, 2, 3] <-> [1, 2, 5] |
2.0 |
Python 风格的列表推导式可用于对列表中的元素进行表达式计算。例如
SELECT [lower(x) FOR x IN strings] AS strings
FROM (VALUES (['Hello', '', 'World'])) t(strings);
SELECT [upper(x) FOR x IN strings IF len(x) > 0] AS strings
FROM (VALUES (['Hello', '', 'World'])) t(strings);
列表推导式还可以通过添加第二个变量来使用列表元素的位置。在下面的示例中,我们使用 x, i,其中 x 是值,i 是位置
SELECT [4, 5, 6] AS l, [x FOR x, i IN l IF i != 2] AS filtered;
| l |
filtered |
| [4, 5, 6] |
[4, 6] |
在底层,[f(x) FOR x IN l IF g(x)] 被转换为
l.list_apply(lambda x, i: {'filter': g(x, i), 'result': f(x, i)})
.list_filter(lambda x: x.filter)
.list_apply(lambda x: x.result)
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 变体。
SELECT generate_series(5);
SELECT generate_series(2, 5);
SELECT generate_series(2, 5, 3);
generate_subscripts(arr, dim) 函数生成沿数组 arr 的第 dim 个维度的索引。
SELECT generate_subscripts([4, 5, 6], 1) AS i;
也支持 TIMESTAMP 和 TIMESTAMP WITH TIME ZONE 值的日期范围。请注意,对于这些类型,必须显式指定 stop 和 step 参数(不提供默认值)。
SELECT *
FROM range(DATE '1992-01-01', DATE '1992-03-01', INTERVAL '1' MONTH);
| range |
| 1992-01-01 00:00:00 |
| 1992-02-01 00:00:00 |
SELECT *
FROM generate_series(DATE '1992-01-01', DATE '1992-03-01', INTERVAL '1' MONTH);
| generate_series |
| 1992-01-01 00:00:00 |
| 1992-02-01 00:00:00 |
| 1992-03-01 00:00:00 |
list_slice 函数可用于从列表中提取子列表。存在以下变体
list_slice(list, begin, end)
list_slice(list, begin, end, step)
array_slice(list, begin, end)
array_slice(list, begin, end, step)
list[begin:end]
list[begin:end:step]
参数说明如下
list
begin
- 切片中包含的第一个元素的索引
- 当
begin < 0 时,索引从列表末尾开始计算
- 当
begin < 0 且 -begin > length 时,begin 被固定在列表开头
- 当
begin > length 时,结果为空列表
- 括号表示法: 省略
begin 时,默认为列表开头
end
- 切片中包含的最后一个元素的索引
- 当
end < 0 时,索引从列表末尾开始计算
- 当
end > length 时,end 被固定为 length
- 当
end < begin 时,结果为空列表
- 括号表示法: 省略
end 时,默认为列表末尾。当省略 end 并提供 step 时,必须用 - 替换 end
step (可选)
- 切片中元素之间的步长
- 当
step < 0 时,切片会被反转,并且 begin 和 end 会互换
- 必须是非零值
示例
SELECT list_slice([1, 2, 3, 4, 5], 2, 4);
SELECT ([1, 2, 3, 4, 5])[2:4:2];
SELECT([1, 2, 3, 4, 5])[4:2:-2];
SELECT ([1, 2, 3, 4, 5])[:];
SELECT ([1, 2, 3, 4, 5])[:-:2];
SELECT ([1, 2, 3, 4, 5])[:-:-2];
list_aggregate 函数允许对列表元素执行任意现有的聚合函数。它的第一个参数是列表(列),第二个参数是聚合函数名称,例如 min、histogram 或 sum。
list_aggregate 接受聚合函数名称之后的其他参数。这些额外参数直接传递给作为 list_aggregate 第二个参数的聚合函数。
顺序敏感的聚合函数按列表顺序应用。list_aggregate 不支持 ORDER BY、DISTINCT 和 FILTER 子句。它们可以通过 list_sort、list_grade_up、list_select、list_distinct 和 list_filter 来模拟。
SELECT list_aggregate([1, 2, -4, NULL], 'min');
SELECT list_aggregate([2, 4, 8, 42], 'sum');
SELECT list_aggregate([[1, 2], [NULL], [2, 10, 3]], 'last');
SELECT list_aggregate([2, 4, 8, 42], 'string_agg', '|');
以下是现有重写列表。重写通过仅将列表(列)作为参数来简化列表聚合函数的使用。list_avg, list_var_samp, list_var_pop, list_stddev_pop, list_stddev_samp, list_sem, list_approx_count_distinct, list_bit_xor, list_bit_or, list_bit_and, list_bool_and, list_bool_or, list_count, list_entropy, list_last, list_first, list_kurtosis, list_kurtosis_pop, list_min, list_max, list_product, list_skewness, list_sum, list_string_agg, list_mode, list_median, list_mad 和 list_histogram。
SELECT list_min([1, 2, -4, NULL]);
SELECT list_sum([2, 4, 8, 42]);
SELECT list_last([[1, 2], [NULL], [2, 10, 3]]);
使用可选分隔符连接列表/数组元素。
SELECT array_to_string([1, 2, 3], '-') AS str;
这等同于以下 SQL
SELECT list_aggr([1, 2, 3], 'string_agg', '-') AS str;
list_sort 函数以升序或降序对列表元素进行排序。此外,它允许指定 NULL 值应移至列表的开头还是结尾。它具有与 DuckDB 的 ORDER BY 子句相同的排序行为。因此,(嵌套)值在 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 顺序。
SELECT list_sort([1, 3, NULL, 2], 'DESC', 'NULLS FIRST');
list_reverse_sort 有一个可选的第二个参数,用于提供 NULL 排序顺序。它可以是 NULLS FIRST 或 NULLS LAST。
此查询使用默认 NULL 排序顺序。
SELECT list_sort([1, 3, NULL, 5, NULL, -5]);
[NULL, NULL, -5, 1, 3, 5]
此查询提供 NULL 排序顺序。
SELECT list_reverse_sort([1, 3, NULL, 2], 'NULLS LAST');
flatten 函数是一个标量函数,它通过连接每个子列表将列表的列表转换为单个列表。请注意,这每次只展平一级,而不是所有级别的子列表。
将列表的列表转换为单个列表
SELECT
flatten([
[1, 2],
[3, 4]
]);
如果列表有多个级别的列表,则只有第一级子列表会被连接成单个列表
SELECT
flatten([
[
[1, 2],
[3, 4],
],
[
[5, 6],
[7, 8],
]
]);
[[1, 2], [3, 4], [5, 6], [7, 8]]
通常,flatten 函数的输入应该是列表的列表(而不是单级列表)。但是,flatten 函数在处理空列表和 NULL 值时有特定的行为。
如果输入列表为空,则返回空列表
如果 flatten 的整个输入为 NULL,则返回 NULL
如果展平一个唯一条目为 NULL 的列表,则返回空列表
如果列表的列表中的子列表仅包含 NULL,则不要修改该子列表
-- (Note the extra set of parentheses vs. the prior example)
SELECT flatten([[NULL]]);
即使每个子列表的内容仅为 NULL,仍然将它们连接在一起。请注意,展平时不会发生去重。请参阅 list_distinct 函数进行去重
SELECT flatten([[NULL], [NULL]]);
DuckDB 支持 lambda parameter1, parameter2, ...: expression 形式的 lambda 函数。有关详细信息,请参阅 lambda 函数页面。
© 2025 DuckDB 基金会,阿姆斯特丹,荷兰