类似PostgreSQL数组的MYSQL数组聚合函数

类似PostgreSQL数组的MYSQL数组聚合函数,mysql,Mysql,我在MYSQL上有两个表,我想知道MYSQL上是否有作为postgreSQL的array_agg()的聚合函数 表1属性只有8条记录 表2记录了谁捕获了该属性,因此对于同一属性,有时可能是1或n次,我得到了以下Qry: SELECT p.id, pcb.users_admin_id as uid FROM properties p INNER JOIN prop_captured_by pcb ON p.id = pcb.property_id -- GROUP BY p.id id u

我在MYSQL上有两个表,我想知道MYSQL上是否有作为postgreSQL的array_agg()的聚合函数

表1属性只有8条记录 表2记录了谁捕获了该属性,因此对于同一属性,有时可能是1或n次,我得到了以下Qry:

SELECT p.id, pcb.users_admin_id as uid
FROM properties p
INNER JOIN prop_captured_by pcb ON p.id = pcb.property_id
-- GROUP BY p.id

id    uid
200   1
200   80
202   1
202   80
211   1
211   10
211   81
215   10 ...
如果我按部分使用组,我会得到以下结果:

id    uid
200   1
202   1
211   1
215   10 ...
除了用户\u admin\u id的第一个值之外,其他任何数据都会丢失。我知道我可以使用postgreSQL的array\u agg()函数实现我想要的结果,但我不知道如何在MYSQL上实现

这是我渴望的结果:

id    uid
200   1,80 //an array, I don't mind about the separator, could be anything.
202   1,80
211   1,10,81
215   10 ...
我试过联合,分组,内部联合。。。没有运气。。。 有什么建议吗

更新

我用的是这个家伙的。希望对其他人有用。我需要从第三个表中添加用户名,因此最终查询如下所示:

SELECT p.id, group_concat(pcb.users_admin_id) as uid, group_concat(ua.name) as uin
FROM properties p
INNER JOIN prop_captured_by pcb ON p.id = pcb.property_id
INNER JOIN users_admin ua ON ua.id = pcb.users_admin_id
group by p.id;

我想您需要
组\u concat()


这将生成一个逗号分隔的字符串,但它与MySQL中的数组非常接近。

您想使用类似的
GROUP\u CONCAT()

SELECT p.id, group_concat(pcb.users_admin_id) as uid
FROM properties p
INNER JOIN prop_captured_by pcb 
ON p.id = pcb.property_id
group by p.id;

MySQL 5.7.22引入了
JSON_ARRAYAGG()
JSON_OBJECTAGG()
。由于您还需要用户名,因此可以使用后者:

SELECT p.id, JSON_OBJECTAGG(pcb.users_admin_id, ua.name) as uin
FROM properties p
INNER JOIN prop_captured_by pcb ON p.id = pcb.property_id
INNER JOIN users_admin ua ON ua.id = pcb.users_admin_id
group by p.id;

它返回一个字符串。如果p.id不在AGG(pcb.any)
中,如何/可能在
中使用它?
SELECT p.id, JSON_OBJECTAGG(pcb.users_admin_id, ua.name) as uin
FROM properties p
INNER JOIN prop_captured_by pcb ON p.id = pcb.property_id
INNER JOIN users_admin ua ON ua.id = pcb.users_admin_id
group by p.id;