将一栏分成几栏 sql
Split one column into several sql
我有这个table:
Path Value Time
name1.metric1 v1 t1
name1.metric2 v2 t1
name1.metric3 v3 t1
name1.metric4 v4 t1
name2.metric1 v5 t2
name2.metric2 v6 t2
name2.metric3 v7 t2
name2.metric4 v8 t2
'Path' 中有四个指标针对每个用户具有不同的值。一个用户的每个指标的时间都相同。
我想知道,如何将 'Path' 拆分为另外四列,如下所示:
Path metric1 metric2 metric3 metric4 Time
name1 v1 v2 v3 v4 t1
name2 v5 v6 v7 v8 t2
我使用 Clickhouse 作为数据库,有什么想法,谢谢
我对 Clickhouse 不是很熟悉。您基本上需要条件聚合,以及 path
.
上的一些字符串操作
像这样:
select splitbychar(path, '.')[1] as name, time,
max(case when path like '%.metric1' then value end) as value1,
max(case when path like '%.metric2' then value end) as value2,
max(case when path like '%.metric3' then value end) as value3,
max(case when path like '%.metric4' then value end) as value4
from t
group by splitbychar(path, '.')[1], time
我有这个table:
Path Value Time
name1.metric1 v1 t1
name1.metric2 v2 t1
name1.metric3 v3 t1
name1.metric4 v4 t1
name2.metric1 v5 t2
name2.metric2 v6 t2
name2.metric3 v7 t2
name2.metric4 v8 t2
'Path' 中有四个指标针对每个用户具有不同的值。一个用户的每个指标的时间都相同。
我想知道,如何将 'Path' 拆分为另外四列,如下所示:
Path metric1 metric2 metric3 metric4 Time
name1 v1 v2 v3 v4 t1
name2 v5 v6 v7 v8 t2
我使用 Clickhouse 作为数据库,有什么想法,谢谢
我对 Clickhouse 不是很熟悉。您基本上需要条件聚合,以及 path
.
像这样:
select splitbychar(path, '.')[1] as name, time,
max(case when path like '%.metric1' then value end) as value1,
max(case when path like '%.metric2' then value end) as value2,
max(case when path like '%.metric3' then value end) as value3,
max(case when path like '%.metric4' then value end) as value4
from t
group by splitbychar(path, '.')[1], time