下载吧 - 绿色安全的游戏和软件下载中心

软件下载吧

当前位置:软件下载吧 > 技术开发 > 数据库 > PostgreSQL 实现将多行合并转为列

PostgreSQL 实现将多行合并转为列

时间:2024-02-21 13:55作者:下载吧人气:22

需求将下列表格相同id的name拼接起来输出成一列

id Name
1 peter
1 lily
2 john

转化后效果:

id Name
1 peter;lily
2 john;

实现方式使用 array_to_string 和 array_agg 函数,具体语句如下:

string_agg(expression, delimiter) 把表达式变成一个数组

string_agg(expression, delimiter) 直接把一个表达式变成字符串

select id, array_to_string( array_agg(Name), ‘;’ ) from table group by id

补充:Postgresql实现动态的行转列

问题

在数据处理中,常遇到行转列的问题,比如有如下的问题:

有这样的一张表

“Student_score”表:

姓名 课程 分数
张三 数学 83
张三 物理 93
张三 语文 80
李四 语文 74
李四 数学 84
李四 物理 94

我们想要得到像这样的一张表:

姓名 数学 物理 语文
李四 84 94 74
张三 83 93 80

当数据量比较少时,我们可以在Excel中使用数据透视表pivot table的功能实现这个需求,但当数据量较大,或者我们还需要在数据库中进行后续的数据处理时,使用数据透视表就显得不那么高效。

下面,介绍如何在Postgresql中实现数据的行转列。

静态写法

当我们要转换的值字段是数值型时,我们可以用SUM()函数:

CREATE TABLE Student_score(姓名 varchar, 课程 varchar, 分数 int);
INSERT INTO Student_score VALUES(‘张三’,’数学’,83);
INSERT INTO Student_score VALUES(‘张三’,’物理’,93);
INSERT INTO Student_score VALUES(‘张三’,’语文’,80);
INSERT INTO Student_score VALUES(‘李四’,’语文’,74);
INSERT INTO Student_score VALUES(‘李四’,’数学’,84);
INSERT INTO Student_score VALUES(‘李四’,’物理’,94);
select 姓名
,sum(case 课程 when ‘数学’ then 分数 end) as 数学
,sum(case 课程 when ‘物理’ then 分数 end) as 物理
,sum(case 课程 when ‘语文’ then 分数 end) as 语文
from Student_score
GROUP BY 1

标签[db:关键字]

相关下载

查看所有评论+

网友评论

网友
您的评论需要经过审核才能显示

热门阅览

最新排行

公众号