clickhouse组内拼接的实现

要实现MySQL中的group_concat 功能
Clickhouse需要用到三个函数组合使用:

>groupArray 行转列
>groupUniqArray 等同于mysql中的 group_concat(distinct …)
>arrayStringConcat 等同于group_concat 子语句中的separator ‘-’ 语句

这是一个KPI表,可以很好的理解这三个函数,实现了把每个月的绩效拼接,并记录次数。

emp_no|performance|month  |
------|-----------|-------|
    10|A          |2020-01|
    10|A          |2020-02|
    10|C          |2020-03|
    10|B          |2020-04|
    10|A          |2020-05|
    10|A          |2020-06|
    20|A          |2020-01|
    20|B          |2020-02|
    20|C          |2020-03|
    20|C          |2020-04|
    20|A          |2020-05|
    20|D          |2020-06|
    30|C          |2020-03|
    30|C          |2020-04|
    30|B          |2020-05|
    30|B          |2020-06|

clickhouse组内拼接的实现

SELECT 
    emp_no,
    groupArray(performance) AS kpi_asc,
    arrayStringConcat(kpi_asc, '-') AS kpi_list,
    arrayReverse(kpi_asc) AS kpi_desc,
    groupUniqArray(performance) AS kpis,
    arraySort(kpis) AS kpi_uniq,
    countEqual(kpi_asc, 'A') AS A_cnt,
    countEqual(kpi_asc, 'B') AS B_cnt,
    countEqual(kpi_asc, 'C') AS C_cnt,
    countEqual(kpi_asc, 'D') AS D_cnt
FROM kpi
GROUP BY emp_no
ORDER BY emp_no ASC

emp_no|kpi_asc                  |kpi_list   |kpi_desc                 |kpis             |kpi_uniq         |A_cnt|B_cnt|C_cnt|D_cnt|
------|-------------------------|-----------|-------------------------|-----------------|-----------------|-----|-----|-----|-----|
    10|['A','A','C','B','A','A']|A-A-C-B-A-A|['A','A','B','C','A','A']|['B','A','C']    |['A','B','C']    |    4|    1|    1|    0|
    20|['A','B','C','C','A','D']|A-B-C-C-A-D|['D','A','C','C','B','A']|['B','D','A','C']|['A','B','C','D']|    2|    1|    2|    1|
    30|['C','C','B','B']        |C-C-B-B    |['B','B','C','C']        |['B','C']        |['B','C']        |    0|    2|    2|    0|
kpi_list:按照月份依次显示每个月的绩效
kpi_uniq:上半年获得的绩效 等级(绩效去重)
kpi_uniq_desc :去重后的绩效反向排序

原文链接:https://blog.csdn.net/vkingnew/article/details/107730452

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值