You should fix the data model. You should have three tables:
users
: one row per users
groups
: one row per groups
user_groups
: one row per user/group combination
With your data model, I would use arrays to unpivot the values and then reaggregate:
I prefer arrays to JSON, so I would use:
select ug.type,
(select array_agg(u.name)
from (unnest(array[ug.user_1, ug.user_2, ug.user_3])) ar(user_id) join
users u
on u.user_id = u.id
) as users
from user_groups ug;
You can use a JSON function if you really want JSON.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…