我以此表为例
id user_id user_name profile_image post_id
1 10 A a.png 1
2 11 B x.png 1
3 12 D j.png 4
4 13 F g.png 4
我想要的是按post_id
对行进行分组,以便结果如下:
post_id user_ids user_names profile_images
1 {10,11} {A,B} {a.png,x.ping}
我尝试使用GROUP BY
和JOIN
s,json_object
我怎样才能做到这一点?
答案 0 :(得分:1)
在MySQL版本5.7.22
或更高版本上,我们可以使用JSON_ARRAYAGG
:
SELECT
post_id,
JSON_ARRAYAGG(user_id) AS user_ids,
JSON_ARRAYAGG(user_name) AS user_names,
JSON_ARRAYAGG(profile_image) AS profile_images
FROM yourTable
GROUP BY post_id;
答案 1 :(得分:0)
使用GROUP_CONCAT
。
select
post_id,
GROUP_CONCAT(user_id) as user_ids,
GROUP_CONCAT(username) as usernames,
GROUP_CONCAT(profile_image) as profile_images
from <your_table> group by post_id;
然后,您可以相应地格式化输出。
答案 2 :(得分:0)
您可以使用group_concat对值进行分组
select post_id
, concat( '{', group_concat(user_id), '}' )
, concat( '{', group_concat(user_name), '}' )
, concat( '{', group_concat(profile_images), '}' )
from
group by post_id
使用concat格式化结果