これは元の質問に答えます。
tags
も必要ありません users
も クエリ用のテーブルなので、大幅に簡略化できます。
DISTINCT
JSON_AGG()
では許可されていません 。ただし、サブクエリを使用できます:
SELECT b.user_id, JSON_ARRAYAGG( b.tag_id) AS tags
FROM (SELECT DISTINCT b.user_id, bt.tag_id
FROM bookmark_tag bt JOIN
bookmark b
ON b.id = bt.bookmark_id
) b
GROUP BY b.user_id;
こちら db<>フィドルです。