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

    xiaoxiao2022-07-03  191

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

    场景:

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

    idisbooktime69857002019-07-1169857002019-07-1269857002019-07-1369857002019-07-1469857002019-07-1569857002019-07-1669857002019-07-1769857002019-07-1869857002019-07-1969857002019-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

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

    idisbookeffectdateList69857002019-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

     

    最新回复(0)