【数据库】HIVE SQL函数之行转列

       小白之前经常在工作中遇到需要行转列的情况,这次就总结一下,之前遇到过的各种情况,及在各种情况下的函数应用。

场景:

现有一个表,表示一个房型在未来60天的是否可订情况,由于房型的数据量是庞大的,可能达到几十亿,那么在展示时,就需要把可订酒店的可订天数展示为一个字段,这样就会缩小整个表的行数。

idisbooktime
69857002019-07-11
69857002019-07-12
69857002019-07-13
69857002019-07-14
69857002019-07-15
69857002019-07-16
69857002019-07-17
69857002019-07-18
69857002019-07-19
69857002019-07-20

将这样的数据变为一行展示,就使用到之前博文中讲到的concat_ws函数,具体使用可以参考之前博文(https://blog.csdn.net/Jarry_cm/article/details/86995580),这个函数与collect_set或者collect_list匹配使用可以达到不同的效果。collect_set函数是对统计的数据进行去重,然后拼接在一起,collect_list是不去重,直接所有出现的值进行拼接。

语法如下,以collect_list为例:

select id,
       isbook,
       concat_ws (',', collect_list(time)) as effectdateList
  from table
 group by id,isbook

结果为(因为本数据中没有重复的日期,所以是所有日期的拼接结果,两个函数一样,有重复的日期时,函数的区别就体现出来了,这里就不另外在举例):

idisbookeffectdateList
69857002019-07-18,2019-07-13,2019-07-14,2019-07-11,2019-07-16,2019-07-15,2019-07-17,2019-07-20,2019-07-12,2019-07-19

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值