Relational Data - Aggregate Functions - Reference - Grouparrayinsertat
Inserts a value into the array at the specified position.
Syntax
groupArrayInsertAt(default_x, size)(x, pos)
If in one query several values are inserted into the same position, the function behaves in the following ways:
- If a query is executed in a single thread, the first one of the inserted values is used.
- If a query is executed in multiple threads, the resulting value is an undetermined one of the inserted values.
Arguments
x
— Value to be inserted. Expression resulting in one of the supported data types.pos
— Position at which the specified elementx
is to be inserted. Index numbering in the array starts from zero. UInt32.default_x
— Default value for substituting in empty positions. Optional parameter. Expression resulting in the data type configured for thex
parameter. Ifdefault_x
is not defined, the default values are used.size
— Length of the resulting array. Optional parameter. When using this parameter, the default valuedefault_x
must be specified. UInt32.
Returned value
- Array with inserted values.
Type: Array.
Example
Query:
SELECT groupArrayInsertAt(toString(number), number * 2) FROM numbers(5);
Result:
┌─groupArrayInsertAt(toString(number), multiply(number, 2))─┐
│ ['0','','1','','2','','3','','4'] │
└───────────────────────────────────────────────────────────┘
Query:
SELECT groupArrayInsertAt('-')(toString(number), number * 2) FROM numbers(5);
Result:
┌─groupArrayInsertAt('-')(toString(number), multiply(number, 2))─┐
│ ['0','-','1','-','2','-','3','-','4'] │
└────────────────────────────────────────────────────────────────┘
Query:
SELECT groupArrayInsertAt('-', 5)(toString(number), number * 2) FROM numbers(5);
Result:
┌─groupArrayInsertAt('-', 5)(toString(number), multiply(number, 2))─┐
│ ['0','-','1','-','2'] │
└───────────────────────────────────────────────────────────────────┘
Multi-threaded insertion of elements into one position.
Query:
SELECT groupArrayInsertAt(number, 0) FROM numbers_mt(10) SETTINGS max_block_size = 1;
As a result of this query you get random integer in the [0,9]
range. For example:
┌─groupArrayInsertAt(number, 0)─┐
│ [7] │
└───────────────────────────────┘