简体   繁体   中英

Mysql Rows which have same values but in different column & Show them in a single row

What I want to do is merge the rows which have same values but in different column & Show them in a single row

I Tried to use the JSON_ARRAYAGG() but didn't get the results in my way

User Data

Here secondary user is the reference of primary_user

id username secondary_user code
1 max_max null 1356
2 jac_jac 1 1111
3 leo_leo null 2222
4 bob_bob 3 4444

Result I want

id username secondary_user code secondary_users
1 max_max null 1356 [{"jac_jac", "1111"}]
3 leo_leo null 2222 [{"bob_bob", "4444"}]

First you need a self join of the table.
Then use JSON_OBJECT() to create valid json objects for a user in the form of {"user_name": "user_code"} and not {"user_name", "user_code"} and finally aggregate and use JSON_ARRAYAGG() :

SELECT t1.*,
       JSON_ARRAYAGG(JSON_OBJECT(t2.username, t2.code)) secondary_users
FROM tablename t1 LEFT JOIN tablename t2
ON t2.secondary_user = t1.id
WHERE t1.secondary_user IS NULL
GROUP BY t1.id;

I assume that id is the primary key of the table.

See the demo .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM