如何解决将列转入 ClickHouse 中的 NxM 表
想象一下我有一张像
col_a col_b col_c
one a 1.0
one b 2.0
two a 3.0
two b 4.0
我想把它变成
a b
one 1.0 2.0
two 3.0 4.0
我知道可以在 Postgres 中使用 crosstab 或在 Pandas 中使用 df.unstack 或 df.pivot
可以在 ClickHouse 中完成吗?
解决方法
create table t123(col_a String,col_b String,col_c Float64) Engine=Memory;
insert into t123 values('one','a',1.0),('one','b',2.0),('two',3.0),4.0);
select col_a,(sumMap( g.1,g.2 )) from (
select col_a,groupArray( (col_b,col_c) ) as g from t123 group by col_a)
group by col_a;
┌─col_a─┬─sumMap(tupleElement(g,1),tupleElement(g,2))─┐
│ two │ (['a','b'],[3,4]) │
│ one │ (['a',[1,2]) │
└───────┴────────────────────────────────────────────────┘
select col_a,arrayZip( (sumMap( g.1,g.2 ) as x).1,x.2) r from (
select col_a,col_c) ) as g from t123 group by col_a)
group by col_a;
┌─col_a─┬─r─────────────────┐
│ two │ [('a',3),('b',4)] │
│ one │ [('a',2)] │
└───────┴───────────────────┘
,
在 Postgres(使用 SQL 标准)中,您可以通过以下方式实现数据透视:
SELECT
col_a,SUM(
CASE WHEN col_b = 'a' THEN col_c
ELSE 0
END
) as a,SUM(
CASE WHEN col_b = 'b' THEN col_c
ELSE 0
END
) as b
FROM mytable
GROUP BY col_a
我不喜欢 ClickHouse,但我想,有机会创建可以与聚合函数(如 CASE
、 IF
、SUM
、...在特定情况下一切正常。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。