postgresql - 将表中的行连接并连接到字符串中
问题描述
我有 2 个表考虑名为 fp 和批处理的表,我必须根据第一个表的 fp[主键] 和第二个表的 fp_inst_id 连接 2 个表,这样我的输出是:
第一个表所有列和第二个表一列,它是 fp.id 和 batch.fp_inst_id 上表 1 和表 2 连接的所有行的连接字符串。注意:[将有多个 fp_inst_id(表 2)用于唯一 ID(表 1)]
让我给你举个例子 :
创建表:
CREATE TABLE fp (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
CREATE TABLE batch (
batchID int,
fp_inst_id int,
xyz varchar(255),
abc varchar(255)
);
insert into fp values(1,'savan','nahar','abc','xyz');
insert into fp values(2,'mmm','asmd','aawd','12k3mn');
insert into batch values(1,1,'garbage1', 'abc1');
insert into batch values(2,1,'garbage2', 'abc2');
insert into batch values(3,1,'garbage3', 'abc3');
insert into batch values(4,2,'garbage9', 'abc9');
如果我像这样正常加入:
select * from fp join batch on fp.PersonID = batch.fp_inst_id;
我想要的是:
批处理列可能会有所不同,如果它有一些其他不被 [] 包围并在 ';' 上分隔的分隔符,那就没问题了 或者其他的东西。
我试过的:
同样的事情可以使用 MYSQL 使用 STUFF,FOR XML PATH 来完成
但是在 POSTGRES SQL 中似乎很困难,因为它不支持这些东西,在 POSTGRES SQL 中我尝试了 string_agg,但它说我要按所有内容分组
我尝试的第二件事是:使用 with 子句首先在 fp_inst_id 上创建表 2 group by 的连接字符串,但在 POSTGRES SQL 中,它允许 group by 主键(这是正常选择)或它要求使用聚合函数
我正在尝试通过查询在 POSTGRES SQL 中执行此操作。
我在这里先向您的帮助表示感谢
解决方案
用于array_agg
组合批处理行和分组依据以将组合括起来。
select personid,lastname,firstname,address,city,
array_agg(batch)
from fp
join batch on fp.PersonID = batch.fp_inst_id
group by personid,lastname,firstname,address,city;
例如:
jasen=# select personid,lastname,firstname,address,city,array_agg(batch) from fp join batch on fp.PersonID = batch.fp_inst_id group by 1,2,3,4,5;
personid | lastname | firstname | address | city | array_agg
----------+----------+-----------+---------+--------+---------------------------------------------------------------------
2 | mmm | asmd | aawd | 12k3mn | {"(4,2,garbage9,abc9)"}
1 | savan | nahar | abc | xyz | {"(1,1,garbage1,abc1)","(2,1,garbage2,abc2)","(3,1,garbage3,abc3)"}
这里的批处理列在技术上包含一个元组数组,但 sting 表示似乎可以接受。
推荐阅读
- php - Laravel:树过滤子递归
- reactjs - 当电子邮件存在错误时如何防止表单提交以及如何在表单本身中设置值而不被重置
- python - Numpy直方图在小数据集上非常慢
- oracle - Oracle 表中存储“隐藏”小数位的数字列
- node.js - Hyperledger Indy 中的 PoolLedgerTimeout
- swift - UITableViewDiffableDataSource 设置不同的单元格动画
- html - Chrome 设备模式看起来与实际设备不同
- python - 没有名为“uff”的模块
- c++ - _mm256_movemask_epi8 到 uint64_t
- scala - 如何解决akka http测试和akka测试套件中的ActorSystem冲突