You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

ClickHouse数组列如何输出元素及其对应位置(+1)?

在ClickHouse中提取数组元素及其位置(位置从1开始)

当然可以搞定这个需求!在ClickHouse里实现起来很直观,核心就是用ARRAY JOIN配合arrayEnumerate函数,完美适配你要的位置从1开始的要求。

针对单个数组的示例

就拿你给出的['c','b','a']数组举例,直接用下面的查询就能得到想要的结果:

SELECT 
    val AS key,
    idx AS position
FROM 
    (SELECT ['c', 'b', 'a'] AS arr)
ARRAY JOIN 
    arr AS val,
    arrayEnumerate(arr) AS idx

执行后输出会是:

keyposition
c1
b2
a3

针对表中数组列的场景

如果你的数组是表中的一列(比如表名为your_table,数组列名为array_column),只需要稍作修改:

SELECT 
    elem AS key,
    pos AS position
FROM 
    your_table
ARRAY JOIN 
    array_column AS elem,
    arrayEnumerate(array_column) AS pos

简单解释下原理

  • arrayEnumerate(arr) 会生成一个和原数组长度一致的新数组,每个元素对应原数组元素的位置(从1开始计数),正好满足你要的位置+1的需求。
  • ARRAY JOIN 用来把数组展开成多行,同时关联原数组元素和对应的位置数组元素,这样每一行就对应一个元素和它的位置。

哪怕数组里有重复元素也不用担心,arrayEnumerate会严格按照原数组的顺序生成位置,不会去重,完全符合你的预期。

内容的提问来源于stack exchange,提问作者redsquare

火山引擎 最新活动