SQL之行列转换

简介: Hive 查询语句之行列转换

行转列

将分散在多行的数据,拼接成一个新的列

concat(str1, str2, ... strN):将传入的任意个字符串拼接后返回

concat_ws(separator, [string | array(string)]+) 只能连接 string 列表或 array<string> 数组

用法1——连接 string array

select concat_ws('&','uuu','kkk','abc');

select concat_ws('$$',array('12','11','66','44','99'));

用法2——连接一个字段的多个值,需要配合 collect_set 使用

select concat_ws('|',collect_set(name))

用法3——连接多个字段的值,可直接使用!

select concat_ws(',',name,age)

collect_set:输入连接符,传入一个字段,将字段中所有的值,去重后返回一个array

collect_list:输入连接符,和collect_set类似,但是不去重,返回一个array

 

经典案例:

将血型和星座都相同的人拼接到一起:

tb1:

name

constellation

blood_type

孙悟空

白羊座

A

大海

射手座

A

宋宋

白羊座

B

猪八戒

白羊座

A

凤姐

 射手座

A

 

 

 

 

  ===

tb2:

 

 

射手座,A

大海|凤姐

白羊座,A 

孙悟空|猪八戒

白羊座,B

宋宋

代码实现:

select info,concat_ws('|',collect_set(name))

from (

select name,concat_ws(',',constellation,blood_type) info

from tb1

)t1

group by info;

 

 

列转行 (lateral view explode)

 

将一个数据类型为array的列中的元素拆分为多行

 

select movie,catefrom movie_info lateral view explode(category) t1 as cate;

经典案例:

tb1:

city

loc

北京

长城

北京

故宫

北京

颐和园

上海

外滩

上海

陆家嘴

上海

南京路

上海

崇明岛

 

 

 

 

 

===

 

tb2

 

 

city

locs

北京

长城,故宫,颐和园

上海

外滩,陆家嘴,南京路,崇明岛

 

tb1--->tb2:

selelct

city,

concat_ws(',',colect_set(loc)) locs

from tb1

group by city;

----------------------------------------------------------------

tb2--->tb1:

select

city,

loc

from tb2 lateral view explode(split(locs,',')) tmp as loc;

目录
相关文章
|
4月前
|
SQL HIVE 索引
【Hive SQL 每日一题】行列转换
该文介绍了如何使用SQL进行数据的行列转换。首先展示了行转列的例子,通过创建一个学生成绩表,利用`IF`和`SUM`函数按学生ID分组,将每个学生的各科成绩转换为独立列。然后,文章讲述了列转行的需求,利用`LATERAL VIEW`和`POSEXPLODE`将已转换的表格恢复为原始行格式,通过索引匹配过滤笛卡尔积避免错误结果。此外,还提到了使用`UNION ALL`的另一种列转行方法。
|
SQL Oracle 关系型数据库
【SQL应知应会】行列转换(三)• Oracle版
【SQL应知应会】行列转换(三)• Oracle版
141 0
|
存储 SQL Oracle
【SQL应知应会】行列转换(二)• MySQL版
【SQL应知应会】行列转换(二)• MySQL版
268 0
|
SQL 存储 Oracle
通过sql做数据透视表,数据库表行列转换(pivot和Unpivot用法)(一)
在mssql中大家都知道可以使用pivot来统计数据,实现像excel的透视表功能 一、MSsqlserver中我们通常的用法
375 0
|
存储 SQL 分布式计算
MaxCompute SQL使用小技巧之行列转换
行列转换在业务需求分析经常使用,方法很多,这里介绍下使用Maxcomputer内置函数进行转换
1361 0
|
SQL 索引 存储
SQL Server SQL性能优化之--pivot行列转换减少扫描计数优化查询语句
原文:SQL Server SQL性能优化之--pivot行列转换减少扫描计数优化查询语句 原文出处:http://www.cnblogs.com/wy123/p/5933734.html     先看常用的一种表结构设计方式:   那么可能会遇到一种典型的查询方式,主子表关联,查询子表中的某些(或者全部)Key点对应的Value,横向显示(也即以行的方式显示)   这种查询方式很明显的一个却显示多次对字表查询(暂时抛开索引)   相比这种查询方式很多人都遇到过,如果子表是配置信息之类的小表的话,问题不大,如果字表数据量较大,可能就会有影响了。
1230 0
|
SQL 数据安全/隐私保护
|
SQL 数据安全/隐私保护