MaxCompute SQL-列转行和行转列-阿里云开发者社区

开发者社区> 隐林> 正文

MaxCompute SQL-列转行和行转列

简介: 1. 假设我们在MaxCompute中有两张表,其中一张表是存用户基本信息,另一张表是存用户的地址信息等,表数据假设如下: user_basic_info: id name 1 a 2 b 3 c
+关注继续查看

大数据计算服务(MaxCompute,原名ODPS)是一种快速、完全托管的TB/PB级数据仓库解决方案。MaxCompute向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全。产品地址:https://www.aliyun.com/product/odps


今天通过两个示例来教大家如何实现列转行和行转列问题


1. 假设我们在MaxCompute中有两张表,其中一张表是存用户基本信息,另一张表是存用户的地址信息等,表数据假设如下:

user_basic_info表

id name
1 a
2 b
3 c
 4 d


user_address

name
address
a add1
a add2
b add3
c

add4

d add5

我们可以看到同一个用户不止一个地址(这里是假设的),我们需要把数据变为如下格式:

id

name

address

1

a

add1,add2

2

b

add3

3

c

add4

4

d

add5

 

建表:

CREATE TABLE user_basic_info   (
 id string,
 name string
);


CREATE TABLE user_address   (
 name string,
 address string
);


插入数据:


insert into table user_basic_info
select '1','a' from (select count(1) from user_basic_info) t;


insert into table user_address
select 'a','add1' from (select count(1) from user_address) t;

执行合并:


select ubi.id, ubi.name, wm_concat(',', ua.address) as address from user_basic_info ubi 
join user_address ua on ubi.name=ua.name GROUP BY ubi.id, ubi.name;

运行结果:

1       a       add1,add2

2       b       add3

3       c       add4

4       d       add5

 

 

2. 假设我们有一张表:

user_info表

id

name

address

1

a

add1,add2

2

b

add3

3

c

add4

4

d

add5

 

我们需要拆分address,变为:

id

name

address

1

a

add1

1

a

add2

2

b

add3

3

c

add4

4

d

add5

 

建表

CREATE TABLE user_info   (
 id string,
 name string,
 address string
);

插入数据(导入第一个实验的结果):


insert into table user_info select ubi.id, ubi.name, wm_concat(',', ua.address) as address from user_basic_info ubi
join user_address ua on ubi.name=ua.name GROUP BY ubi.id, ubi.name;

执行拆分:


select id, name, add_new from user_info ui lateral view explode(split(ui.address,',')) adtable as add_new;

 

结果为:

1       a       add1
1       a       add2
2       b       add3
3       c       add4
4       d       add5

 

bba01b493e1c5d904e882b1c380673c6ebe49a98

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SQL Server 2008 R2——PIVOT 行转列 以及聚合函数的选择
原文:SQL Server 2008 R2——PIVOT 行转列 以及聚合函数的选择 ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完整性。
900 0
SQL Server调优系列玩转篇(如何利用查询提示(Hint)引导语句运行)
原文:SQL Server调优系列玩转篇(如何利用查询提示(Hint)引导语句运行) 前言 前面几篇我们分析了关于SQL Server关于性能调优的一系列内容,我把它分为两个模块。 第一个模块注重基础内容的掌握,共分6篇文章完成,内容涵盖一系列基础运算算法,详细分析了如何查看执行计划、掌握执行计划优化点,并一一列举了日常我们平常所写的T-SQL语句所会应用的运算符。
1339 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
2510 0
SQL server 动态行转列
用聚合函数配合CASE语句实现行转列功能: 现在分享一下具体实现代码: 转换前效果: PlanName PlanType PlanLimit 计划1 计划类型1 RMB 1,000,000 计划1 计划类型2 RMB 1,000,000 计划1 计划类型3 ...
797 0
做图表统计你需要掌握SQL Server 行转列和列转行
原文:做图表统计你需要掌握SQL Server 行转列和列转行 说在前面            做一个数据统计和分析的项目,每天面对着各种数据,经过存储过程从源表计算汇总后需要写入中间结果表以提高数据使用效率,那么此时就需要用到行转列和列转行。
1770 0
数据库行转列的sql语句(zt)
转载:http://www.cnblogs.com/Charles2008/archive/2008/03/04/1090162.html 问题描述 假设有张学生成绩表(CJ)如下 Name Subject Result 张三 语文 80 张三 数学 90 张三 物理 85 李四 语文...
750 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
8952 0
+关注
隐林
阿里云大数据产品专家,擅长MaxCompute、机器学习、分布式、可视化、人工智能等大数据领域;
288
文章
38
问答
来源圈子
更多
MaxCompute(原ODPS)是一项面向分析的大数据计算服务,它以Serverless架构提供快速、全托管的在线数据仓库服务,消除传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您经济并高效的分析处理海量数据。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《Nacos架构&原理》
立即下载
《看见新力量:二》电子书
立即下载
云上自动化运维(CloudOps)白皮书
立即下载