同样的,CH中并没有直接提供对应的开窗函数,需要利用一些特殊函数变相实现,主要会用到下面几个数组函数,它们分别是:
arrayEnumerate
arrayEnumerateDense
arrayEnumerateUniq...这些函数均接受一个数组作为输入参数,并返回数组中元素出现的位置,例如:
ch7.nauu.com :) SELECT arrayEnumerate([10,20,30,10,40]) AS row_number...┌─row_number──┬─dense_rank──┬─uniq_rank───┐
│ [1,2,3,4,5] │ [1,2,3,1,4] │ [1,1,1,2,1] │
└─────────...第三步,计算val的RANK,需要用到刚才介绍的几个arrayEnumerate*函数,由于它们的入参要求数组,所以先使用 groupArray将 val 转成数组:
SELECT
id,...第四步,数组展开,利用ARRAY JOIN将数组展开,并按照 id 、RANK列排序:
SELECT
id,
val,
row_number,
dense_rank