首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL数组聚合函数(如PostgreSQL array_agg )

MYSQL数组聚合函数(如PostgreSQL array_agg )
EN

Stack Overflow用户
提问于 2016-08-19 02:10:06
回答 3查看 35.3K关注 0票数 29

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

表1的属性只有8个记录表2记录谁捕获了该属性,因此有时可能是1次或n次相同的属性,我得到了这个Qry:

代码语言:javascript
复制
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 ...

如果我按部分使用这个组,我会得到以下信息:

代码语言:javascript
复制
id    uid
200   1
202   1
211   1
215   10 ...

丢失users_admin_id的第一个值以外的任何其他数据。我知道我可以使用array_agg()函数从postgreSQL中获得我想要的结果,但是我不知道如何在MYSQL上实现它。

这是我渴望的结果:

代码语言:javascript
复制
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 ...

我试过联合,团体,内部加入.没有运气..。有什么指示吗?

更新

我用的是这个家伙的许多到许多关系。希望它对别人有用。我需要从第三个表中添加用户名,所以最后的查询如下所示:

代码语言:javascript
复制
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;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-19 02:22:14

你想像这样使用GROUP_CONCAT()

代码语言:javascript
复制
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;
票数 48
EN

Stack Overflow用户

发布于 2018-03-06 13:58:50

MySQL 5.7.22引入了JSON_ARRAYAGG()JSON_OBJECTAGG()。由于您也想要用户名,所以可以使用后者:

代码语言:javascript
复制
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;

DB Fiddle

票数 19
EN

Stack Overflow用户

发布于 2016-08-19 02:21:09

我想你想要group_concat()

代码语言:javascript
复制
SELECT p.id, GROUP_CONCAT(pcb.users_admin_id) as uids
FROM properties p INNER JOIN
     prop_captured_by pcb
     ON p.id = pcb.property_id
GROUP BY p.id;

这会产生一个逗号分隔的字符串,但它与MySQL中的数组一样接近。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39030090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档