Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1192 / 761 / 128
Регистрация: 10.03.2012
Сообщений: 4,898

Формирование JSON

03.09.2025, 11:58. Показов 885. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В базе данных имеются таблицы пользователей и их заказов, связанные отношением "один ко многим". Написать функцию, которая по идентификатору пользователя возвращает документ JSON, содержащий все сведения о пользователе вместе с массивом его заказов.
SQL
1
2
3
CREATE TABLE users(
id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
name text);
SQL
1
2
3
4
CREATE TABLE orders(
id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
user_id INTEGER REFERENCES users(id),
amount NUMERIC);
Результат должен иметь вид:
JavaScript
1
2
3
4
5
{ 
  "user_id": ...,
  "name": ...,
  "orders": [ { "order_id": ..., "amount": ... }, ... ]
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.09.2025, 11:58
Ответы с готовыми решениями:

Формирование результата в одной ячейке
Добрый день , помогите пожалуйста написать запрос. Допустим есть таблица, в ней один столбел с...

Формирование даты
Уважаемые форумчане, помогите, пожалуйста, в формировании условия в поле формы. Дано поле, куда...

Формирование отчета
Здравствуйте, создаю базу данных для своего предприятия, для упрощения работы с инвентаризацией ну...

4
 Аватар для andrey_f
884 / 537 / 228
Регистрация: 21.02.2011
Сообщений: 5,706
03.09.2025, 12:54
типо такого
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE OR REPLACE FUNCTION get_user_with_orders(p_user_id INTEGER)
RETURNS JSONB AS $$
BEGIN
    RETURN (
        SELECT jsonb_build_object(
            'user_id', u.id,
            'name', u.name,
            'orders', COALESCE(
                jsonb_agg(
                    jsonb_build_object(
                        'order_id', o.id,
                        'amount', o.amount
                    )
                ) FILTER (WHERE o.id IS NOT NULL),
                '[]'::jsonb
            )
        )
        FROM users u
        LEFT JOIN orders o ON u.id = o.user_id
        WHERE u.id = p_user_id
        GROUP BY u.id, u.name
    );
END;
0
1192 / 761 / 128
Регистрация: 10.03.2012
Сообщений: 4,898
03.09.2025, 15:18  [ТС]
andrey_f,
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
psql:commands.sql:58: ERROR:  unterminated dollar-quoted string at or near "$$
BEGIN
    RETURN (
        SELECT jsonb_build_object(
            'user_id', u.id,
            'name', u.name,
            'orders', COALESCE(
                jsonb_agg(
                    jsonb_build_object(
                        'order_id', o.id,
                        'amount', o.amount
                    )
                ) FILTER (WHERE o.id IS NOT NULL),
                '[]'::jsonb
            )
        )
        FROM users u
        LEFT JOIN orders o ON u.id = o.user_id
        WHERE u.id = p_user_id
        GROUP BY u.id, u.name
    );
END;
 
SELECT jsonb_pretty(get_user_with_orders(1));"
LINE 2: RETURNS JSONB AS $$
                         ^
0
 Аватар для andrey_f
884 / 537 / 228
Регистрация: 21.02.2011
Сообщений: 5,706
04.09.2025, 12:11
Цитата Сообщение от Whitecolor Посмотреть сообщение
psql:commands.sql:58: ERROR:  unterminated dollar-quoted string at or near "$$
после END в конце добавьте
SQL
1
$$ LANGUAGE plpgsql;
0
1192 / 761 / 128
Регистрация: 10.03.2012
Сообщений: 4,898
07.09.2025, 18:15  [ТС]
SQL
1
CREATE DATABASE ext_semistruct;
SQL
1
2
3
4
CREATE TABLE users(
id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
name text
);
SQL
1
2
3
4
5
CREATE TABLE orders(
id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
user_id INTEGER REFERENCES users(id),
amount NUMERIC
);
SQL
1
INSERT INTO users(name) VALUES ('alice'), ('bob'), ('charlie');
SQL
1
2
3
INSERT INTO orders(amount, user_id)
SELECT round( (random()*1000)::NUMERIC, 2), u.id
FROM users u, generate_series(1,3);
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CREATE FUNCTION get_users_w_orders(user_id INTEGER) RETURNS jsonb LANGUAGE SQL STABLE RETURN (
  SELECT 
    jsonb_build_object(
      'user_id', 
      u.id, 
      'name', 
      u.name, 
      'orders', 
      jsonb_agg(
        jsonb_build_object(
          'order_id', o.id, 'amount', o.amount
        )
      )
    ) 
  FROM 
    users u 
    JOIN orders o ON o.user_id = u.id 
  WHERE 
    u.id = get_users_w_orders.user_id 
  GROUP BY 
    u.id
);
SQL
1
SELECT jsonb_pretty(get_users_w_orders(1));
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.09.2025, 18:15
Помогаю со студенческими работами здесь

Формирование отчета из БД access в виде договора
Добрый день) подскажите , пожалуйста, есть ли возможность формирования отчета из базы данных...

Формирование отчета по вводимым с клавиатуры данным
есть таблица с полями: Номер сотрудника Фамилия сотрудника ... требуется сформировать полный...

формирование отчета
ВСЕМ ПРИВЕТ!!мало что понимаю в VBA.у меня есть форма в ней при помощи ниспадающих списков я...

Формирование запросов о просрочки проверки средств защиты
Уважаемые форумчане и гости форума, доброго времени суток. Есть БД проверки средств защиты на...

помогите исправить ошибки в базе "формирование монтажной сметы"
Добрый всем день!!Получила вот такое задание. 1. Создать таблицы: Таблица 1. Справочник видов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru