大家好,我是热心读者。

首先,这是一篇水文,但是作为一个系列的三胞胎之一,我觉得有必要通过一题多解来扩散一下思维,正所谓“条条大路通罗马”。


前两篇文章分别为:

快速实现分列转到行(Excel版)

快速实现分列转到行(Python版)

数据源以及效果大致是这样的:

通过观察数据,我们发现其实达到的效果,就是列转行,读懂了题意,那么解法就很容易出来了。

下文语法为hivesql,其实在mysql或者sqlserver中也可以实现,不过是需要换一换函数即可,关系性数据库的作业 就留给读者来实现了。


好的,我们就先来构造一下数据:首先建表,两个字段:

create table if not exists student_info(class string COMMENT '年级',students string COMMENT '姓名'
);

其次,往表中插入数据:

INSERT INTO TABLE yht_dw.student_info
SELECT  *
FROM    (SELECT  '1年级' AS class,'A1;B1;C1' AS nameUNION ALLSELECT  '2年级' AS class,'A2;B2;C2' AS nameUNION ALLSELECT  '3年级' AS class,'A3;B3;C3' AS nameUNION ALLSELECT  '4年级' AS class,'A4;B4;C4' AS nameUNION ALLSELECT  '5年级' AS class,'A5;B5;C5' AS nameUNION ALLSELECT  '6年级' AS class,'A6;B6;C6' AS nameUNION ALLSELECT  '7年级' AS class,'A7;B7;C7' AS nameUNION ALLSELECT  '8年级' AS class,'A8;B8;C8' AS nameUNION ALLSELECT  '9年级' AS class,'A9;B9;C9' AS name) t
;

表中数据情况:

下面就直接公布答案:

SELECT  t.class,item AS name
FROM    yht_dw.student_info t
LATERAL VIEW explode(split(t.students,';')) names AS item
;

上结果图:

来解释一下这里的语法

split(string,seprator)

split函数传入两个参数,对string按照seprator进行拆分,这里就相当于把一个字符串变成了一个array

explode

顾名思义,就是“爆炸”函数,就是把上面拆分的array给炸开,由一行三列,变为三行一列

lateral view

跟 explode是一个固定搭配,相当于一种笛卡尔积,将爆炸函数得到的行跟class关联起来

正常来讲,文章到此就结束了,但是太水我觉得内心不安;

而有的读者也会有疑问,我列转行了,那我如何“回去”呢?——也就是如何进行转列呢?


下面接着上脚本:

SELECT  class,collect_set(name) AS names
FROM    (SELECT  t.class,item AS nameFROM    yht_dw.student_info tLATERAL VIEW explode(split(t.students,';')) names AS item) tt
GROUP BY class
;

上结果图:

我懒,没有重新构造数据,直接用的子查询,但是看到结果,可能有读者会有疑问,这个咋还有方括号,还有双引号,这个也太不美观了。

别急,我先解释完语法,解释完,再来优化。

其实hive里有一个类似于“汇总数据”sum的函数,collect_set是专注于文本的汇总杀器,而重要的是:它会剔除重复记录。

那如何解决方括号和双引号的问题呢?

其实也很简单,上脚本:

SELECT  class,concat_ws(';',collect_set(name)) AS names
FROM    (SELECT  t.class,item AS nameFROM    yht_dw.student_info tLATERAL VIEW explode(split(t.students,';')) names AS item) tt
GROUP BY class
;

上优化后结果图:

其实就是加了一个concat_ws函数,此时就把方括号跟双引号给去除了。


好了,今天的文章就是这样,希望没有接触hive语法的同学有所得,已经熟悉hive的同学莫要嘲笑知识点的简单。

以上。

一天介绍一本书(凹凸数据)

别怕,Excel VBA其实很简单(第3版):本书用浅显易懂的语言和生动形象的比喻,并配以大量插画,讲解Excel VBA中看似复杂的概念和代码。从简单的宏录制与运行、VBA编程环境和基础语法的介绍,到常用Excel对象的操作与控制、事件的灵活使用、设计自定义的操作界面、调试与优化编写的代码,都进行了形象的介绍。

点击这里,数据文章!

快速实现分列转到行(SQL版)一个问题,三种解法!相关推荐

  1. Python 快速实现分列转到行!

    作者 | 黄伟呢 来源 | 数据分析与统计学之美 之前看到一篇文章,用Excel快速实现分列转到行的操做. 数据源大致是这样的: 基于此,我动起了一个念头:看看如何用Python快速实现这个操作. 数 ...

  2. 标准SQL的update语句三种用法

    标准SQL的update语句三种用法 一.环境: MySQL-5.0.41-win32 Windows XP professional   二.建立测试环境:   DROP TABLE IF EXIS ...

  3. SQL Server数据库的三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式...

    SQL Server数据库的三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式 这篇文章主要介绍了SQL Server数据库的三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式,需 ...

  4. SQL Server数据库的三种恢复模式

    SQL Server数据库的三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式. sql server数据库提供了三种恢复模式:完整,简单和大容量日志,这些模式决定了sql server如何 ...

  5. SQL Server数据库的三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式

    这篇文章主要介绍了SQL Server数据库的三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式,需要的朋友可以参考下 如何图形界面下修改恢复模式 找到你想修改的数据库 右键 > 属性 ...

  6. JAVA游戏土行孙_挖掘机的三种形态《非人学园》土行孙快速上手指南

    <非人学园>全新英雄土行孙现已正式上线!这只毕业于传说中的布鲁弗莱挖掘机学院,并承包了非都大多数隧道工程的土豪土拨鼠,拥有着与其他学园明星全然不同的技能套路!其拥有3大形态9个技能,招式组 ...

  7. sql 单引号_三种数据库的 SQL 注入详解

    SQL 注入原理 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用 ...

  8. 实例分析SQL中除法的三种写法

    首先请看 http://topic.csdn.net/u/20070821/15/8a2dac05-51b8-4eb1-b41d-4fbe8a232c85.html 帖中从实际问题出发,讨论SQL语句 ...

  9. html去重三种方法,sql语句_ 的三种去重方法

    本文将介绍用 distict.group by 和 row_number() over .html 注:这里的去重是指:查询的时候, 不显示重复,并非删除表中的重复项,关系删除表中重复数据的sql 请 ...

最新文章

  1. oracle 查询天,Oracle查询_ 单表查询
  2. hdu 1867 求两个串的和最小 ,KMP
  3. Android Studio Debug
  4. ireport 找不到子报表:Could not load object from location
  5. android webview 长按复制,Android webview 点击或长按有蒙层 – 热爱改变生活
  6. JavaFX 新WebService客户端脚本语言
  7. bzoj1562 [NOI2009]变换序列
  8. Python编程基础08:循环结构
  9. Cisco公司的CAR流量控制策略
  10. BoxBlur(方框模糊)
  11. Python优化算法07——布谷鸟搜索算法
  12. jaxen-1.1-beta-6.jar下载,Dom4j的xpath的使用
  13. 【PC工具】更新U盘SD卡测试工具,速度测试,坏块测试查找
  14. 微信公众账号开发教程(三) 实例入门:机器人(附源码) ——转自http://www.cnblogs.com/yank/p/3409308.html...
  15. 为何中国移动的上网速度最慢,无阻它成为最大运营商?
  16. 基于数字电路交通灯信号灯控制系统设计-基于单片机病房温度监测与呼叫系统设计-基于STM32的无线蓝牙心电监护仪系统设计-基于STM32的智能蓝牙温控风扇控制设计-基于STM32的智能温室控制系统设计
  17. OS-练习题(10~13)
  18. php几点几面向对象,寸草不生的周六-PHP之面向对象(三)
  19. html从入门到精通胡菘,高职电商网页设计教学实践(共2831字).doc
  20. 全球及中国HDPE电熔配件行业规模预测及十四五动态发展研究报告2021-2027年版

热门文章

  1. Facebook 登录、分享
  2. IOS越狱相关-2017
  3. CTFHUB find_it
  4. matlab绘画三维图形(三)
  5. QQ账户的申请与登录
  6. 分享一篇写给程序员的文章(很好)
  7. 知识图谱:Konwledge Graph简介
  8. Ubuntu虚拟机中VCS安装和启动过程中遇到的问题总结
  9. 研究生英语复习(一)
  10. python实现单机斗地主手机版下载_单机斗地主手机版下载免费版乐