⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
列表函数
函数 描述
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]) 创建 startstop 之间的值列表——包含 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 函数的返回类型转换为 BOOLlist_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) 返回一个包含 list1list2 中共同存在的所有元素(无重复项)的列表。
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]) 创建 startstop 之间的值列表——stop 参数不包含在内。
reduce(list, lambda(x,y)[, initial_value]) list_reduce 的别名。
repeat(list, count) list 重复 count 次。
unnest(list) 将列表取消嵌套一级。请注意,这是一个会改变结果基数的特殊函数。更多详细信息请参阅 unnest 页面
unpivot_list(arg, ...) 与 list_value 相同,但作为 unpivot 的一部分生成,以便提供更好的错误消息。

list[index]

描述 使用(从 1 开始的)index 提取单个列表元素。
示例 [4, 5, 6][3]
结果 6
别名 list_extract

list[begin[:end][:step]]

描述 使用切片约定提取子列表。支持负数索引。
示例 [4, 5, 6][3]
结果 6
别名 list_slice

arg1 || arg2

描述 连接两个字符串、列表或 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

array_extract(list, index)

描述 list 中提取第 index 个(从 1 开始)值。
示例 array_extract([4, 5, 6], 3)
结果 6

array_pop_back(list)

描述 返回移除最后一个元素后的 list
示例 array_pop_back([4, 5, 6])
结果 [4, 5]

array_pop_front(list)

描述 返回移除第一个元素后的 list
示例 array_pop_front([4, 5, 6])
结果 [5, 6]

array_push_front(list, element)

描述 element 添加到 list 的开头。
示例 array_push_front([4, 5, 6], 3)
结果 [3, 4, 5, 6]

array_to_string(list, delimiter)

描述 使用可选的 delimiter 连接列表/数组元素。
示例 1 array_to_string([1, 2, 3], '-')
结果 1-2-3
示例 2 array_to_string(['aa', 'bb', 'cc'], '')
结果 aabbcc

array_to_string_comma_default(array)

描述 使用逗号分隔符连接列表/数组元素。
示例 array_to_string_comma_default(['Banana', 'Apple', 'Melon'])
结果 Banana,Apple,Melon

concat(value, ...)

描述 连接多个字符串或列表。NULL 输入会被跳过。另请参阅 运算符 ||
示例 1 concat('Hello', ' ', 'World')
结果 Hello World
示例 2 concat([1, 2, 3], NULL, [4, 5, 6])
结果 [1, 2, 3, 4, 5, 6]

contains(list, element)

描述 如果 list 包含 element,则返回 true
示例 contains([1, 2, NULL], 1)
结果 true

flatten(nested_list)

描述 展平嵌套列表一级。
示例 flatten([[1, 2, 3], [4, 5]])
结果 [1, 2, 3, 4, 5]

generate_series(start[, stop][, step])

描述 创建 startstop 之间的值列表——包含 stop 参数。
示例 generate_series(2, 5, 3)
结果 [2, 5]

length(list)

描述 返回 list 的长度。
示例 length([1,2,3])
结果 3
别名 char_length, character_length, len

list_aggregate(list, function_name, ...)

描述 list 中的元素执行聚合函数 function_name。有关详细信息,请参阅“列表聚合”部分。
示例 list_aggregate([1, 2, NULL], 'min')
结果 1
别名 aggregate, array_aggr, array_aggregate, list_aggr

list_any_value(list)

描述 将聚合函数 any_value 应用于 list
示例 list_any_value([3,3,9])
结果 3

list_append(list, element)

描述 element 追加到 list 中。
示例 list_append([2, 3], 4)
结果 [2, 3, 4]
别名 array_append, array_push_back

list_approx_count_distinct(list)

描述 将聚合函数 approx_count_distinct 应用于 list
示例 list_approx_count_distinct([3,3,9])
结果 2

list_avg(list)

描述 将聚合函数 avg 应用于 list
示例 list_avg([3,3,9])
结果 5.0

list_bit_and(list)

描述 将聚合函数 bit_and 应用于 list
示例 list_bit_and([3,3,9])
结果 1

list_bit_or(list)

描述 将聚合函数 bit_or 应用于 list
示例 list_bit_or([3,3,9])
结果 11

list_bit_xor(list)

描述 将聚合函数 bit_xor 应用于 list
示例 list_bit_xor([3,3,9])
结果 9

list_bool_and(list)

描述 将聚合函数 bool_and 应用于 list
示例 list_bool_and([true, false])
结果 false

list_bool_or(list)

描述 将聚合函数 bool_or 应用于 list
示例 list_bool_or([true, false])
结果 true

list_concat(list_1, ..., list_n)

描述 连接列表。NULL 输入会被跳过。另请参阅 运算符 ||
示例 list_concat([2, 3], [4, 5, 6], [7])
结果 [2, 3, 4, 5, 6, 7]
别名 list_cat, array_concat, array_cat

list_contains(list, element)

描述 如果列表包含元素,则返回 true。
示例 list_contains([1, 2, NULL], 1)
结果 true
别名 array_contains, array_has, list_has

list_cosine_distance(list1, list2)

描述 计算两个等长列表之间的余弦距离。
示例 list_cosine_distance([1, 2, 3], [1, 2, 3])
结果 0.0
别名 <=>

list_cosine_similarity(list1, list2)

描述 计算两个等长列表之间的余弦相似度。
示例 list_cosine_similarity([1, 2, 3], [1, 2, 3])
结果 1.0

list_count(list)

描述 将聚合函数 count 应用于 list
示例 list_count([3,3,9])
结果 3

list_distance(list1, list2)

描述 计算两个等长列表坐标点之间的欧几里得距离。
示例 list_distance([1, 2, 3], [1, 2, 5])
结果 2.0
别名 <->

list_distinct(list)

描述 从列表中移除所有重复项和 NULL 值。不保留原始顺序。
示例 list_distinct([1, 1, NULL, -3, 1, 5])
结果 [5, -3, 1]
别名 array_distinct

list_entropy(list)

描述 将聚合函数 entropy 应用于 list
示例 list_entropy([3,3,9])
结果 0.9182958340544893

list_extract(list, index)

描述 从列表中提取第 index 个(从 1 开始)值。
示例 list_extract([4, 5, 6], 3)
结果 6
别名 list_element

list_filter(list, lambda(x))

描述 从输入 list 中构造一个列表,其中包含使 lambda 函数返回 true 的元素。DuckDB 必须能够将 lambda 函数的返回类型转换为 BOOLlist_filter 的返回类型与输入列表相同。请参阅 list_filter 示例
示例 list_filter([3, 4, 5], lambda x : x > 4)
结果 [5]
别名 array_filter, filter

list_first(list)

描述 将聚合函数 first 应用于 list
示例 list_first([3,3,9])
结果 3

list_grade_up(list[, col1][, col2])

描述 类似于 list_sort,但结果是对应于原始列表中位置的索引,而不是实际值。
示例 list_grade_up([3, 6, 1, 2])
结果 [3, 4, 1, 2]
别名 array_grade_up, grade_up

list_has_all(list1, list2)

描述 如果 list2 的所有元素都在 list1 中,则返回 true。NULL 值会被忽略。
示例 list_has_all([1, 2, 3], [2, 3])
结果 true
别名 <@, @>, array_has_all

list_has_any(list1, list2)

描述 如果列表有任何公共元素,则返回 true。NULL 值会被忽略。
示例 list_has_any([1, 2, 3], [2, 3, 4])
结果 true
别名 &&, array_has_any

list_histogram(list)

描述 将聚合函数 histogram 应用于 list
示例 list_histogram([3,3,9])
结果 {3=2, 9=1}

list_inner_product(list1, list2)

描述 计算两个等长列表之间的内积。
示例 list_inner_product([1, 2, 3], [1, 2, 3])
结果 14.0
别名 list_dot_product

list_intersect(list1, list2)

描述 返回一个包含 list1list2 中共同存在的所有元素(无重复项)的列表。
示例 list_intersect([1, 2, 3], [2, 3, 4])
结果 [3, 2]
别名 array_intersect

list_kurtosis(list)

描述 将聚合函数 kurtosis 应用于 list
示例 list_kurtosis([3,3,9])
结果 NULL

list_kurtosis_pop(list)

描述 将聚合函数 kurtosis_pop 应用于 list
示例 list_kurtosis_pop([3,3,9])
结果 -1.4999999999999978

list_last(list)

描述 将聚合函数 last 应用于 list
示例 list_last([3,3,9])
结果 9

list_mad(list)

描述 将聚合函数 mad 应用于 list
示例 list_mad([3,3,9])
结果 0.0

list_max(list)

描述 将聚合函数 max 应用于 list
示例 list_max([3,3,9])
结果 9

list_median(list)

描述 将聚合函数 median 应用于 list
示例 list_median([3,3,9])
结果 3.0

list_min(list)

描述 将聚合函数 min 应用于 list
示例 list_min([3,3,9])
结果 3

list_mode(list)

描述 将聚合函数 mode 应用于 list
示例 list_mode([3,3,9])
结果 3

list_negative_inner_product(list1, list2)

描述 计算两个等长列表之间的负内积。
示例 list_negative_inner_product([1, 2, 3], [1, 2, 3])
结果 -14.0
别名 list_negative_dot_product

list_position(list, element)

描述 如果 list 包含该 element,则返回其索引。如果未找到该元素,则返回 NULL
示例 list_position([1, 2, NULL], 2)
结果 2
别名 array_indexof, array_position, list_indexof

list_prepend(element, list)

描述 element 添加到 list 的开头。
示例 list_prepend(3, [4, 5, 6])
结果 [3, 4, 5, 6]
别名 array_prepend

list_product(list)

描述 将聚合函数 product 应用于 list
示例 list_product([3,3,9])
结果 81.0

list_reduce(list, lambda(x,y)[, initial_value])

描述 通过对运行结果和下一个列表元素执行 lambda 函数,将输入 list 的所有元素归约为单个标量值。lambda 函数有一个可选的 initial_value 参数。请参阅 list_reduce 示例
示例 list_reduce([1, 2, 3], lambda x, y : x + y)
结果 6
别名 array_reduce, reduce

list_resize(list, size[[, value]])

描述 list 调整为包含 size 个元素。使用 value 初始化新元素;如果未设置 value,则使用 NULL 初始化。
示例 list_resize([1, 2, 3], 5, 0)
结果 [1, 2, 3, 0, 0]
别名 array_resize

list_reverse(list)

描述 反转 list
示例 list_reverse([3, 6, 1, 2])
结果 [2, 1, 6, 3]
别名 array_reverse

list_reverse_sort(list[, col1])

描述 以反向顺序对列表元素进行排序。有关排序顺序和 NULL 值的更多详细信息,请参阅“排序列表”部分。
示例 list_reverse_sort([3, 6, 1, 2])
结果 [6, 3, 2, 1]
别名 array_reverse_sort

list_select(value_list, index_list)

描述 返回基于 index_list 选择的元素组成的列表。
示例 list_select([10, 20, 30, 40], [1, 4])
结果 [10, 40]
别名 array_select

list_sem(list)

描述 将聚合函数 sem 应用于 list
示例 list_sem([3,3,9])
结果 1.6329931618554523

list_skewness(list)

描述 将聚合函数 skewness 应用于 list
示例 list_skewness([3,3,9])
结果 1.7320508075688796

list_slice(list, begin, end)

描述 使用切片约定提取子列表或子字符串。支持负数。
示例 list_slice([4, 5, 6], 2, 3)
结果 [5, 6]
别名 array_slice

list_slice(list, begin, end, step)

描述 带有额外步长功能的 list_slice。
示例 list_slice([4, 5, 6], 1, 3, 2)
结果 [4, 6]
别名 array_slice

list_sort(list[, col1][, col2])

描述 对列表元素进行排序。有关排序顺序和 NULL 值的更多详细信息,请参阅“排序列表”部分。
示例 list_sort([3, 6, 1, 2])
结果 [1, 2, 3, 6]
别名 array_sort

list_stddev_pop(list)

描述 将聚合函数 stddev_pop 应用于 list
示例 list_stddev_pop([3,3,9])
结果 2.8284271247461903

list_stddev_samp(list)

描述 将聚合函数 stddev_samp 应用于 list
示例 list_stddev_samp([3,3,9])
结果 3.4641016151377544

list_string_agg(list)

描述 将聚合函数 string_agg 应用于 list
示例 list_string_agg([3,3,9])
结果 3,3,9

list_sum(list)

描述 将聚合函数 sum 应用于 list
示例 list_sum([3,3,9])
结果 15

list_transform(list, lambda(x))

描述 返回一个通过将 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_unique(list)

描述 计算 list 中唯一元素的数量。
示例 list_unique([1, 1, NULL, -3, 1, 5])
结果 3
别名 array_unique

list_value(arg, ...)

描述 创建一个包含参数值的 LIST。
示例 list_value(4, 5, 6)
结果 [4, 5, 6]
别名 list_pack

list_var_pop(list)

描述 将聚合函数 var_pop 应用于 list
示例 list_var_pop([3,3,9])
结果 8.0

list_var_samp(list)

描述 将聚合函数 var_samp 应用于 list
示例 list_var_samp([3,3,9])
结果 12.0

list_where(value_list, mask_list)

描述 返回一个列表,该列表将 mask_list 中的 BOOLEAN 值作为掩码应用于 value_list
示例 list_where([10, 20, 30, 40], [true, false, false, true])
结果 [10, 40]
别名 array_where

list_zip(list_1, ..., list_n[, truncate])

描述 将 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

range(start[, stop][, step])

描述 创建 startstop 之间的值列表——stop 参数不包含在内。
示例 range(2, 5, 3)
结果 [2]

repeat(list, count)

描述 list 重复 count 次。
示例 repeat([1, 2, 3], 5)
结果 [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]

unnest(list)

描述 将列表取消嵌套一级。请注意,这是一个会改变结果基数的特殊函数。更多详细信息请参阅 unnest 页面
示例 unnest([1, 2, 3])
结果 多行:'1', '2', '3'

unpivot_list(arg, ...)

描述 与 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);
字符串
[hello, , world]
SELECT [upper(x) FOR x IN strings IF len(x) > 0] AS strings
FROM (VALUES (['Hello', '', 'World'])) t(strings);
字符串
[HELLO, WORLD]

列表推导式还可以通过添加第二个变量来使用列表元素的位置。在下面的示例中,我们使用 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),以及它们带有 stopstep 默认参数的变体。这两个函数在处理 stop 参数时的行为有所不同,下文对此进行了说明。

range

range 函数创建 startstop 之间的值列表。start 参数是包含的,而 stop 参数是不包含的。start 的默认值为 0,step 的默认值为 1。

根据参数数量,存在以下 range 变体。

range(stop)

SELECT range(5);
[0, 1, 2, 3, 4]

range(start, stop)

SELECT range(2, 5);
[2, 3, 4]

range(start, stop, step)

SELECT range(2, 5, 3);
[2]

generate_series

generate_series 函数创建 startstop 之间的值列表。startstop 参数均包含在内。start 的默认值为 0,step 的默认值为 1。根据参数数量,存在以下 generate_series 变体。

generate_series(stop)

SELECT generate_series(5);
[0, 1, 2, 3, 4, 5]

generate_series(start, stop)

SELECT generate_series(2, 5);
[2, 3, 4, 5]

generate_series(start, stop, step)

SELECT generate_series(2, 5, 3);
[2, 5]

generate_subscripts(arr, dim)

generate_subscripts(arr, dim) 函数生成沿数组 arr 的第 dim 个维度的索引。

SELECT generate_subscripts([4, 5, 6], 1) AS i;
i
1
2
3

日期范围

也支持 TIMESTAMPTIMESTAMP WITH TIME ZONE 值的日期范围。请注意,对于这些类型,必须显式指定 stopstep 参数(不提供默认值)。

range 用于日期范围

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

generate_series 用于日期范围

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 时,切片会被反转,并且 beginend 会互换
    • 必须是非零值

示例

SELECT list_slice([1, 2, 3, 4, 5], 2, 4);
[2, 3, 4]
SELECT ([1, 2, 3, 4, 5])[2:4:2];
[2, 4]
SELECT([1, 2, 3, 4, 5])[4:2:-2];
[4, 2]
SELECT ([1, 2, 3, 4, 5])[:];
[1, 2, 3, 4, 5]
SELECT ([1, 2, 3, 4, 5])[:-:2];
[1, 3, 5]
SELECT ([1, 2, 3, 4, 5])[:-:-2];
[5, 3, 1]

列表聚合

list_aggregate 函数允许对列表元素执行任意现有的聚合函数。它的第一个参数是列表(列),第二个参数是聚合函数名称,例如 minhistogramsum

list_aggregate 接受聚合函数名称之后的其他参数。这些额外参数直接传递给作为 list_aggregate 第二个参数的聚合函数。

顺序敏感的聚合函数按列表顺序应用。list_aggregate 不支持 ORDER BYDISTINCTFILTER 子句。它们可以通过 list_sortlist_grade_uplist_selectlist_distinctlist_filter 来模拟。

SELECT list_aggregate([1, 2, -4, NULL], 'min');
-4
SELECT list_aggregate([2, 4, 8, 42], 'sum');
56
SELECT list_aggregate([[1, 2], [NULL], [2, 10, 3]], 'last');
[2, 10, 3]
SELECT list_aggregate([2, 4, 8, 42], 'string_agg', '|');
2|4|8|42

list_* 重写函数

以下是现有重写列表。重写通过仅将列表(列)作为参数来简化列表聚合函数的使用。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_madlist_histogram

SELECT list_min([1, 2, -4, NULL]);
-4
SELECT list_sum([2, 4, 8, 42]);
56
SELECT list_last([[1, 2], [NULL], [2, 10, 3]]);
[2, 10, 3]

array_to_string

使用可选分隔符连接列表/数组元素。

SELECT array_to_string([1, 2, 3], '-') AS str;
1-2-3

这等同于以下 SQL

SELECT list_aggr([1, 2, 3], 'string_agg', '-') AS str;
1-2-3

排序列表

list_sort 函数以升序或降序对列表元素进行排序。此外,它允许指定 NULL 值应移至列表的开头还是结尾。它具有与 DuckDB 的 ORDER BY 子句相同的排序行为。因此,(嵌套)值在 list_sort 中的比较方式与在 ORDER BY 中相同。

默认情况下,如果没有提供修饰符,DuckDB 会按 ASC NULLS FIRST 排序。即,值按升序排列,NULL 值放在最前面。这与 SQLite 的默认排序顺序相同。默认排序顺序可以使用 PRAGMA 语句更改。

list_sort 使用户可以选择使用默认排序顺序还是自定义顺序。list_sort 最多可接受两个额外的可选参数。第二个参数提供排序顺序,可以是 ASCDESC。第三个参数提供 NULL 顺序,可以是 NULLS FIRSTNULLS 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 顺序。

SELECT list_sort([1, 3, NULL, 2], 'DESC', 'NULLS FIRST');
[NULL, 3, 2, 1]

list_reverse_sort 有一个可选的第二个参数,用于提供 NULL 排序顺序。它可以是 NULLS FIRSTNULLS 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');
[3, 2, 1, NULL]

展平

flatten 函数是一个标量函数,它通过连接每个子列表将列表的列表转换为单个列表。请注意,这每次只展平一级,而不是所有级别的子列表。

将列表的列表转换为单个列表

SELECT
    flatten([
        [1, 2],
        [3, 4]
    ]);
[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 值时有特定的行为。

如果输入列表为空,则返回空列表

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 函数进行去重

SELECT flatten([[NULL], [NULL]]);
[NULL, NULL]

Lambda 函数

DuckDB 支持 lambda parameter1, parameter2, ...: expression 形式的 lambda 函数。有关详细信息,请参阅 lambda 函数页面

© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南