PostgreSQL行转列的多种方法

2024-03-01 0 944
目录
  • PostgreSQL如何行转列
    • 方法一:group by + sum + case when
    • 方法二:用postgresql的crosstab交叉函数
    • 方法三:group by + string_agg + split_part(分组,行转列,字符切割)

PostgreSQL如何行转列

方法一:group by + sum + case when

select name,
sum(case when zbfm=\’年龄\’ then value else 0 end) as 年龄,
sum(case when zbfm=\’身高\’ then value else 0 end) as 身高,
sum(case when zbfm=\’体重\’ then value else 0 end) as 体重
from test group by name
having name like \’%1\’ and length(name)=4 order by 年龄 desc

PostgreSQL行转列的多种方法

方法二:用postgresql的crosstab交叉函数

crosstab(unknown, unknown) does not exist
select * from
crosstab(
\’select name,zbfm,value from test where name like \’\’%1\’\’ and length(name)=4\’,$$values(\’年龄\’), (\’身高\’), (\’体重\’)$$)
as score(name text, 年龄 int, 身高 int, 体重 int)
order by 年龄 desc

PostgreSQL行转列的多种方法

方法三:group by + string_agg + split_part(分组,行转列,字符切割)

select name,
split_part(split_part(temp,\’,\’,1),\’:\’,2) as 年龄,
split_part(split_part(temp,\’,\’,2),\’:\’,2) as 身高,
split_part(split_part(temp,\’,\’,3),\’:\’,2) as 体重
from(
select name, string_agg(zbfm||\’:\’||value,\’,\’) as temp from test
group by name
having name like \’%1\’ and length(name)=4
) as t order by 年龄 desc

PostgreSQL行转列的多种方法

group by + string_agg

select name, string_agg(zbfm||\’:\’||value,\’,\’) from test
group by name
having name like \’%1\’ and length(name)=4

PostgreSQL行转列的多种方法

到此这篇关于PostgreSQL如何行转列的文章就介绍到这了,更多相关PostgreSQL行转列内容请搜索悠久资源以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 PostgreSQL PostgreSQL行转列的多种方法 https://www.u-9.cn/database/postgresql/182701.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务