Перейти до основного вмісту
Модуль 15 · Урок 2 із 257/57 у курсі~15 min
Модульні уроки (2/2)

Функції агрегації JSON

Функції агрегації JSON

Інтеграція двонаправлена. База даних не повинна обмежуватися аналізом JSON: вона може створити її. Уявіть, якби вашому API і Node.js не доводилося виконувати брудну, інтенсивну роботу з серіалізації вкладених об’єктів у JSON, оскільки БД доставляла їх уже зібраними прямо з диска.

Побудова об'єктів і масивів

Замість класичної масової агрегації або конкатенації рядків (String_agg) ми звернемося до цих функцій:

  • json_build_object(key, value, ...) або jsonb_build_object(...)
  • json_agg(...) або jsonb_agg(...)
SQL
SELECT json_build_object('name', first_name, 'city', city) AS data
FROM customers;

Ви побачите надруковані рядки, які містять { "name": "...", "city": "..." }, що повністю відповідає вимогам.

вправи#sql.m15.l2.e1
Спроби: 0Завантаження…

З таблиці «клієнти» поверніть дані як рядки JSON, зіставлені за допомогою \`json_build_object\`. Зіставте два ключі: «ім’я», пов’язане з «ім’ям», і «пошта», пов’язане з «електронною поштою». Використовуйте \`AS customer_doc\` для стовпця.

Завантаження редактора…
Показати підказку

json_build_object('name', first_name, 'mail', email)

Рішення доступне після 3 спроб

вправи#sql.m15.l2.e2
Спроби: 0Завантаження…

Для кожного замовлення (\`order_id\`) створіть в одному блоку всі \`product_id\`, які він містить. З таблиці 'order_items' запустіть \`GROUP BY order_id\`. Потім виберіть \`order_id\` і накопичуйте в масиві JSON (JSON_AGG) лише дані \`product_id\`. Назвіть масив \`продукти\`.

Завантаження редактора…
Показати підказку

JSON_AGG(product_id) плюс класичне групування за для збору даних.

Рішення доступне після 3 спроб