网站LOGO
逐暗者的麦田
页面加载中
4月27日
网站LOGO 逐暗者的麦田
一个java软件攻城狮
菜单
  • 逐暗者的麦田
    一个java软件攻城狮
    用户的头像
    首次访问
    上次留言
    累计留言
    我的等级
    我的角色
    打赏二维码
    打赏博主
    hive行转列
    点击复制本页信息
    微信扫一扫
    文章二维码
    文章图片 文章标题
    创建时间
  • 一 言
    确认删除此评论么? 确认
  • 本弹窗介绍内容来自,本网站不对其中内容负责。
    按住ctrl可打开默认菜单

    hive行转列

    shellingford · 原创 ·
    程序人生 · hive行转列
    共 1135 字 · 约 1 分钟 · 443
    本文最后更新于2023年08月05日,已经过了265天没有更新,若内容或图片失效,请留言反馈

    hive中如何进行行转列呢?

    我们先创建一个表,并初始化一些数据进去

    mysql 代码:
    CREATE TABLEtest(
          name STRING COMMENT '姓名',
          subject STRING COMMENT '主题',
          score INT COMMENT '分数'
    
      ) COMMENT '测试表' ;
    
    INSERT INTO test values('张三','语文',100),('李四','语文',90),('张三','数学',80),('李四','数学',80);

    可以看到现在表test中的数据是这样的

    现在我们用name进行分组,然后把subject的语文、数学变成列,再将score变成语文、数学列的值。

    mysql 代码:
      SELECT name
      ,concat_ws('-',collect_list(if(subject = '语文',CAST(score as STRING),null))) as `语文`
      ,concat_ws('-',collect_list(if(subject = '数学',CAST(score as STRING),null))) as `数学`
      FROM test
      GROUP BY name

    再看一下效果

    其中涉及到几个函数

    concat_ws

    concat_ws函数需要传入2个参数,第一个参数为拼接字符串,第二个参数为需要拼接的列名集合,需要注意的是,如果集合中存在null则会被忽略,利用这一点我们可以把多行的同一列数据拼接成一个字段,形成列转行。

    IF

    if 函数用来判断条件然后返回内容,第一个参数是条件,第二个参数是条件true时返回的内容,第三个参数是条件false时返回的内容。配合concat_ws函数忽略null的特性,可以用来指定返回那一行的值,例如

    mysql 代码:
    if(subject = '语文',CAST(score as STRING),null)

    则只会返回语文那一行的数据

    CAST

    这是一个转换函数,因为concat_ws后的列需要一个string类型,所以将score从int转为string

    声明:本文由 shellingford(博主)原创,依据 CC-BY-NC-SA 4.0 许可协议 授权,转载请注明出处。

    还没有人喜爱这篇文章呢

    发一条! 发一条!
    博客logo 逐暗者的麦田 一个java软件攻城狮
    MOEICP 萌ICP备20237379号 ICP 沪ICP备13037081号-2,沪ICP备13037081号-1,沪ICP备13037081号-3 又拍云 本站由又拍云提供CDN加速/云存储服务

    🕛

    本站已运行 2 年 244 天 22 小时 27 分

    🌳

    自豪地使用 Typecho 建站,并搭配 MyLife 主题
    逐暗者的麦田. © 2021 ~ 2024.
    网站logo

    逐暗者的麦田 一个java软件攻城狮
     
     
     
     
    壁纸