Mysql组由多个具有不同值的列组成

时间:2018-01-27 08:08:24

标签: mysql group-by

我以此表为例

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 BYJOIN s,json_object 我怎样才能做到这一点?

3 个答案:

答案 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格式化结果