'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"}] |
Solution 1:[1]
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.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | forpas |
