跳至主要内容

groupArrayInsertAt

在指定位置将值插入数组。

语法

groupArrayInsertAt(default_x, size)(x, pos)

如果在一个查询中将多个值插入到相同的位置,则函数的行为方式如下

  • 如果查询在单个线程中执行,则使用第一个插入的值。
  • 如果查询在多个线程中执行,则结果值是插入值的未确定值。

参数

  • x — 要插入的值。导致以下之一的表达式 支持的数据类型.
  • pos — 要插入指定元素 x 的位置。数组中的索引编号从零开始。 UInt32.
  • default_x — 用于替换空位置的默认值。可选参数。导致为 x 参数配置的数据类型的表达式。如果未定义 default_x,则使用默认值.
  • size — 结果数组的长度。可选参数。使用此参数时,必须指定默认值 default_xUInt32.

返回值

  • 包含插入值的数组。

类型: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;

此查询的结果是在[0,9]范围内获得随机整数。例如

┌─groupArrayInsertAt(number, 0)─┐
│ [7] │
└───────────────────────────────┘