有没有一种方法可以计算对配置单元中的每一行都有特定值的列数。我有一些看起来像输入的数据,我想计算有多少列的值为'a',有多少列的值为'b',然后得到像'output'一样的输出。有没有一种方法可以通过配置单元查询来实现这一点?
fdbelqdn1#
使用 lateral view 与 explode 对数据进行聚合。
lateral view
explode
select id ,sum(cast(col='a' as int)) as cnt_a ,sum(cast(col='b' as int)) as cnt_b ,sum(cast(col in ('a','b') as int)) as cnt_total from tbl lateral view explode(array(ci_1,ci_2,ci_3,ci_4,ci_5)) tbl as col group by id
xqnpmsa82#
hive中的一种方法是:
select ( (case when cl_1 = 'a' then 1 else 0 end) + (case when cl_2 = 'a' then 1 else 0 end) + (case when cl_3 = 'a' then 1 else 0 end) + (case when cl_4 = 'a' then 1 else 0 end) + (case when cl_5 = 'a' then 1 else 0 end) ) as count_a, ( (case when cl_1 = 'b' then 1 else 0 end) + (case when cl_2 = 'b' then 1 else 0 end) + (case when cl_3 = 'b' then 1 else 0 end) + (case when cl_4 = 'b' then 1 else 0 end) + (case when cl_5 = 'b' then 1 else 0 end) ) as count_b from t;
为了获得总计数,我建议使用子查询并添加 count_a 以及 count_b .
count_a
count_b
2条答案
按热度按时间fdbelqdn1#
使用
lateral view
与explode
对数据进行聚合。xqnpmsa82#
hive中的一种方法是:
为了获得总计数,我建议使用子查询并添加
count_a
以及count_b
.