跳到主要内容
跳到主要内容

arrayJoin 函数

这是一个非常不寻常的函数。

普通函数不会改变行集,而只是改变每行中的值(映射)。 聚合函数压缩一组行(折叠或减少)。 arrayJoin 函数则是将每一行生成一组行(展开)。

此函数以数组作为参数,并将源行传播到多个行,数量等于数组中的元素个数。 所有列中的值都被简单复制,除了应用此函数的列中的值;它被替换为相应的数组值。

示例:

arrayJoin 函数影响查询的所有部分,包括 WHERE 部分。请注意结果为 2,即使子查询返回了 1 行。

示例:

一个查询可以使用多个 arrayJoin 函数。在这种情况下,转换会执行多次并且行数会增加。

示例:

重要提示!

使用多个相同表达式的 arrayJoin 可能不会产生预期的结果,因为进行了优化。 对于这种情况,请考虑通过额外的操作修改重复的数组表达式,以便不影响连接结果 - 例如 arrayJoin(arraySort(arr))arrayJoin(arrayConcat(arr, []))

示例:

请注意在 SELECT 查询中的 ARRAY JOIN 语法,它提供了更广泛的可能性。 ARRAY JOIN 允许你同时转换多个具有相同元素数量的数组。

示例:

或者你可以使用 Tuple

示例: