使用where子句计算列

sczxawaw  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(247)

有没有一种方法可以计算对配置单元中的每一行都有特定值的列数。

我有一些看起来像输入的数据,我想计算有多少列的值为'a',有多少列的值为'b',然后得到像'output'一样的输出。有没有一种方法可以通过配置单元查询来实现这一点?

fdbelqdn

fdbelqdn1#

使用 lateral viewexplode 对数据进行聚合。

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
xqnpmsa8

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 .

相关问题