数组中具有不同索引的元素之间的 Clickhouse 差异

Posted

技术标签:

【中文标题】数组中具有不同索引的元素之间的 Clickhouse 差异【英文标题】:Clickhouse difference between elements with different indexes in the array 【发布时间】:2021-07-01 19:35:46 【问题描述】:

我有下一个挑战。 我们在组数组中设置了定价范围,例如 [[1,1000],[1001, 2000], [2003,5000]]

是否有可能接收到 x 数组的第二个元素和 x+1 数组的第一个元素之间的差异。 在结果中,我需要类似的东西 [1,3]

或者我可以制作一个展平列表并在所有元素之间执行 arrayDifference 但随后我收到 [999,1,999,3,2997]

如何仅使用 clickhouse 函数获取奇数元素?

【问题讨论】:

【参考方案1】:

试试这个查询:

SELECT
    arrs,
    arrayMap(index -> arrs[index][1] - arrs[index - 1][2], range(2, length(arrs) + 1)) AS result
FROM 
(
    /* test data set */
    SELECT [] AS arrs
    UNION ALL
    SELECT [[1, 1000]] AS arrs
    UNION ALL
    SELECT [[1, 1000], [1001, 2000]] AS arrs
    UNION ALL
    SELECT [[1, 1000], [1001, 2000], [2003, 5000]] AS arrs
    UNION ALL    
    SELECT [[1, 1000], [1001, 2000], [2003, 5000], [5008, 7890]] AS arrs
)

/*
┌─arrs───────────────────────────────────────────┬─result──┐
│ []                                             │ []      │
│ [[1,1000]]                                     │ []      │
│ [[1,1000],[1001,2000]]                         │ [1]     │
│ [[1,1000],[1001,2000],[2003,5000]]             │ [1,3]   │
│ [[1,1000],[1001,2000],[2003,5000],[5008,7890]] │ [1,3,8] │
└────────────────────────────────────────────────┴─────────┘
*/

【讨论】:

以上是关于数组中具有不同索引的元素之间的 Clickhouse 差异的主要内容,如果未能解决你的问题,请参考以下文章

我有一个基于所选城市长度不同的对象数组。如何选择包含具有特定属性的对象的元素?

在数组中查找具有更大索引但数组中值较小的元素[重复]

BQ数组查找:类似于NTH,但基于索引,而不是位置

CUDA笔记(一)线程与数据量的关系

C ++中具有负索引的类似数组的数据结构

p-multiSelect onchange 防止添加具有相同索引的元素