Строки SQL в массив Json с группировкой и агрегацией

Моя цель — взять данные из строки с определенным идентификатором и преобразовать их в объект JSON для вставки в другую таблицу. То, с чего я начинаю, выглядит так

      Event_Details
-----------------------------------
ID | ID2  | First_Name| Last_Name | 
-----------------------------------
1X | 2B   | John      | Smith     |
2X | 2B   | Adam      | John      | 
3X | 2B   | Sarah     | Jones     | 
1X | 5C   | Joe       | Rob       |

То, что я хочу, выглядит так:

[
  {
    "id2": "2B",
    "event": {
      "ID": "1X",
      "First_Name": "John",
      "Last_Name": "Smith" 
    }
  },
{
    "id2": "5C",
    "event": {
      "ID": "1X",
      "First_Name": "Joe",
      "Last_Name": "Rob" 
    }
  }
]

Мне нужно сгруппировать элементы в один объект JSON по «ID», но я хочу, чтобы id2 находился вне массива «Event».

Это то, что у меня есть до сих пор, что делает первое, у меня просто проблемы с вложением запроса для массива внутри него:

select json_agg (b)
        from (select ID2 as "ID2"
        from event_details 
)b
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
455
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я считаю, что это то, что вы ищете:

select json_agg(jsonb_build_object('id2', id2, 
                    'event', jsonb_build_object('ID', id, 
                                                 'First_Name', first_name, 
                                                 'Last_Name', last_name
))) 
from event_details group by id;

Другие вопросы по теме