hivesql实现多行转一行中的collect_list与collect_set的区别

行转列是sql中常用语法,通常最普遍的做法是使用max,sum再配合case when 来做到,见之前一个blog:是的我又来推销我的blog哈哈哈哈哈嗝儿~

而对于多行转一行的可以使用函数来实现,由于现在hive,spark 使用较为普遍,这里我们拿里面的两个函数collect_list和collect_set来举例说明,MySQL里也有对应的多行转一行——group_concat

collect_list和collect_set都是用来做多行结果转到一行的,他们的区别是前者不去重,后者去重,(不难理解,学过python的都知道set是去重函数),具体使用方法如下:

原数据是这样的

我们的需求是结果做到两列,比如  dog,[water,meat,mantou],实现如下

-- collect_list
select name,collect_list(food) as food from ty_table_liqb_tmp group by name

-- collect_set
select name,collect_set(food) as food from ty_table_liqb_tmp group by name

这里两个函数,我只贴出了一个结果图的原因不是因为我懒,是因为编制测试数据时我忘了写重复数据,所以去不去重都是同一个结果,尴尬,,,至于为什么不重新编一下数据,因为我懒!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章