clickhouse - 如何替换数组中的元素?
问题描述
我需要改变array(1,0,2,3,4,0,0,5,6,0,7)
。array(1,1,2,3,4,4,4,5,6,6,7)
我的代码:
select
arrayMap (i-> (if(i=0, indexOf(arr,i)-1, i)), arr)
from (select array(1,0,2,3,4,0,0,5,6,0,7) as arr)
但它返回array(1,1,2,3,4,1,1,5,6,1,7)
。怎么做?
解决方案
它看起来很奇怪但有效(备注:零索引的 0 值被忽略):
SELECT
arrayEnumerate(arr) AS indexes,
[0, 1, 0, 2, 0, 0, 0, 3, 4, 0, 0, 5, 6, 0, 7, 8, 0] AS arr,
arrayMap(i -> if((arr[i] = 0) AND (i > 1), arr[(i - arrayFirst(x -> (arr[(i - x)] != 0), indexes))], arr[i]), indexes) AS result
FORMAT Vertical
结果:
Row 1:
──────
indexes: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
sourceData: [0,1,0,2,0,0,0,3,4,0,0,5,6,0,7,8,0]
result: [0,1,1,2,2,2,2,3,4,4,4,5,6,6,7,8,8]
推荐阅读
- node.js - 为 node.js 安装其他工具会出错
- android - 如果我在 Android Java 上按底部导航,有没有办法获得与以前相同的屏幕?
- nestjs - NestJs 中的上下文是什么
- mongodb - 在 go 中更新 MongoDB 数组字段
- java - JCIP 取消上市 7.18 毒丸
- python - 无法在循环中读取打开的 cv 中保存的视频
- javascript - 如何使用 NestJS 命名法为猫鼬写下嵌套模式
- node.js - UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性'findIndex'.....在我的NODEJS项目中
- java - 使用 Spring Boot JPA 从 mysql 数据库获取 JSONArray
- html - 如何在 Kibana 中更改徽标?