函数聚合函数聚合函数groupArrayInsertAtgroupArrayInsertAt groupArrayInsertAt 引入自:v1.1 在指定位置向数组中插入一个值。 如果在同一个查询中有多个值被插入到同一位置,函数行为如下: 如果查询在单线程中执行时,则使用最先插入的那个值。 如果查询在多线程中执行,则结果值是在这些插入值中不确定的其中一个。 语法 groupArrayInsertAt(default_x, size)([x, pos]) 参数 default_x — 可选。用于填充空缺位置的默认值。Any size — 可选。结果数组的长度。使用该参数时,必须同时指定默认值 default_x。UInt32 参数说明 x — 要插入的值。Any pos — 插入指定元素 x 的位置。数组的索引从零开始计数。UInt32 返回值 返回包含已插入值的数组。Array 示例 不带参数的基本用法 SELECT groupArrayInsertAt(toString(number), number * 2) FROM numbers(5); ┌─groupArrayInsertAt(toString(number), multiply(number, 2))─┐ │ ['0','','1','','2','','3','','4'] │ └───────────────────────────────────────────────────────────┘ 带默认值参数时的用法 SELECT groupArrayInsertAt('-')(toString(number), number * 2) FROM numbers(5); ┌─groupArrayInsertAt('-')(toString(number), multiply(number, 2))─┐ │ ['0','-','1','-','2','-','3','-','4'] │ └────────────────────────────────────────────────────────────────┘ 结合默认值和大小参数的用法 SELECT groupArrayInsertAt('-', 5)(toString(number), number * 2) FROM numbers(5); ┌─groupArrayInsertAt('-', 5)(toString(number), multiply(number, 2))─┐ │ ['0','-','1','-','2'] │ └───────────────────────────────────────────────────────────────────┘ 多线程向同一位置插入数据 SELECT groupArrayInsertAt(number, 0) FROM numbers_mt(10) SETTINGS max_block_size = 1; ┌─groupArrayInsertAt(number, 0)─┐ │ [7] │ └───────────────────────────────┘