首页 > 解决方案 > 当元素可以分配到多个组时,如何计算组中的元素

问题描述

给定以下数据:(id:int,group: string

+---------+-----------+
| id      | group     | 
+---------+-----------+
| 1       | 'a,b,c'   |
| 2       | 'a'       |
| 3       | 'a,c'     |
+---------+-----------+

我想获得每个组的参与者数量。结果应该是:

+---------+--------+
| group   | count  | 
+---------+--------+
| a       | 3      |
| b       | 1      |
| c       | 2      |
+---------+--------+

我怎样才能实现它?查询应该是什么样子?我试过使用 split() 函数但没有任何结果:/

标签: hivebigdata

解决方案


这应该可以解决问题:

select
   main.group,
   count(1)
from
   (
   select
       explode(split(group, ",")) as group
   from
       main
   ) main
group by
   main.group

如果您的查询比您提供的示例更复杂,您可能还想阅读lateral view.

参考。https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF


推荐阅读