pgsql行列转换

[复制链接]
发表于 2025-10-20 22:00:36 | 显示全部楼层 |阅读模式
目次

一、造测试数据
二、行转列
1.函数界说
2.语法
3.示例

三、列转行
1.函数界说
2.语法
3.示例


一、造测试数据

  1. create table test (
  2. id    int,
  3. json1 varchar,
  4. json2 varchar
  5. );
  6. insert into test values(1,'111','{111}');
  7. insert into test values(2,'111,222','{111,222}');
  8. insert into test values(3,'111,222,333','{111,222,333}');
  9. select * from test;
复制代码
造完数据如下 



二、行转列

1.函数界说

regexp_split_to_table是PostgreSQL中的一个函数,用于将一个字符串根据正则表达式举行分割,并将效果返回为一个表格,每个分割后的部分作为一行‌‌。
2.语法

  1. regexp_split_to_table(string text, pattern text) → setof text
  2. string:要分割的原始字符串。
  3. pattern:用于分割的正则表达式模式‌
  4. 返回值,该函数返回一个setof text,即一个文本类型的行集合,包含所有分割后的部分
复制代码
3.示例

  1. select
  2.      id
  3.     ,json1
  4.     ,json2
  5.     ,regexp_replace(regexp_replace(json2,'{',''),'}','') no_json2 --剔除json2外面大括号
  6.     ,regexp_split_to_table(json1,',') as j1 --使用json1来转换结果
  7.     ,regexp_split_to_table(regexp_replace(regexp_replace(json2,'{',''),'}',''),',') as j2 --使用json2来转换结果
  8. from test
  9. ;
复制代码
实验效果




三、列转行

1.函数界说

string_agg() 函数是 PostgreSQL 中的一个聚合函数,用于将一个列中的值毗连成一个字符串。
2.语法

  1. string_agg(column_name, separator)  
  2. column_name:要聚合的列名。
  3. separator:可选参数,用于连接各个值的分隔符。如果未指定或为空,则使用默认分隔符(逗号加空格)。
复制代码
3.示例

  1. --将j1用;拼接
  2. select string_agg (j1,';')
  3. from (
  4. select
  5.      id
  6.     ,json1
  7.     ,json2
  8.     ,regexp_replace(regexp_replace(json2,'{',''),'}','') no_json2 --剔除json2外面大括号
  9.     ,regexp_split_to_table(json1,',') as j1 --使用json1来转换结果
  10.     ,regexp_split_to_table(regexp_replace(regexp_replace(json2,'{',''),'}',''),',') as j2 --使用json2来转换结果
  11. from test
  12. ) t
  13. ;
复制代码
实验效果



  1. --根据id分组按j1用abc拼接
  2. select id,string_agg (j1,'abc')
  3. from (
  4. select
  5.      id
  6.     ,json1
  7.     ,json2
  8.     ,regexp_replace(regexp_replace(json2,'{',''),'}','') no_json2 --剔除json2外面大括号
  9.     ,regexp_split_to_table(json1,',') as j1 --使用json1来转换结果
  10.     ,regexp_split_to_table(regexp_replace(regexp_replace(json2,'{',''),'}',''),',') as j2 --使用json2来转换结果
  11. from test
  12. ) t
  13. group by id
  14. ;
复制代码
实验效果


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表