hive多行转多列

【自取】最近整理的,有需要可以领取学习:

方案一: sum case when

select brand,
    max(case when area_name='东北' then total_price_actual else 0 end) db_price,
    max(case when area_name='华北' then total_price_actual else 0 end) hb_price,
    max(case when area_name='华东' then total_price_actual else 0 end) hd_price,
    max(case when area_name='华南' then total_price_actual else 0 end) hn_price,
    max(case when area_name='西南' then total_price_actual else 0 end) xn_price,
    max(case when area_name='西北' then total_price_actual else 0 end) xb_price,
    max(case when area_name='东北' then qty else 0 end) db_qty,
    max(case when area_name='华北' then qty else 0 end) hb_qty,
    max(case when area_name='华东' then qty else 0 end) hd_qty,
    max(case when area_name='华南' then qty else 0 end) hn_qty,
    max(case when area_name='西南' then qty else 0 end) xn_qty,
    max(case when area_name='西北' then qty else 0 end) xb_qty
from (
    select brand, area_name, sum(total_price_actual) total_price_actual, sum(qty) qty
    from hive_temp_vipvop.vop_xstore_retail
    group by brand, area_name
) tmp
group by brand

方案二:

select brand,
    kv1['华北'] hb_price, kv2['华北'] hb_qty,
    kv1['华东'] hd_price, kv2['华东'] hd_qty,
    kv1['东北'] db_price, kv2['东北'] db_qty,
    kv1['华南'] hn_price, kv2['华南'] hn_qty,
    kv1['西南'] sn_price, kv2['西南'] xn_qty,
    kv1['西北'] xb_price, kv2['西北'] xb_qty
 from (
    select brand, str_to_map(concat_ws(',', collect_set(concat(area_name, '-', total_price_actual))),',','-') kv1,
     str_to_map(concat_ws(',', collect_set(concat(area_name, '-', qty))),',','-') kv2
    from (
        select brand, area_name, sum(total_price_actual) total_price_actual, sum(qty) qty
        from hive_temp_vipvop.vop_xstore_retail
        group by brand, area_name
    ) tmp
   group by brand
 ) t

CONCAT() 函数可将两个或多个字符串连接成一个字符串,

语法如下: CONCAT ( input_string1, input_string2 [, input_stringN ] );

collect_set(col)函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。

concat_ws()函数用于在拼接的时候指定分隔符,CONCAT_WS(separator,str1,str2,…)

str_to_map(text[, delimiter1, delimiter2]). 使用两个分隔符将文本拆分为键值对。Delimiter1将文本分成K-V对,Delimiter2分割每个K-V对。

Original: https://www.cnblogs.com/ghj1976/p/hive-duo-xing-zhuan-duo-lie.html
Author: 蝈蝈俊
Title: hive多行转多列

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/6767/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

发表回复

登录后才能评论
免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部