赞
踩
行转列是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
这里两个函数,我只贴出了一个结果图的原因不是因为我懒,是因为编制测试数据时我忘了写重复数据,所以去不去重都是同一个结果,尴尬,,,至于为什么不重新编一下数据,因为我懒!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。