Начало » Использование СУБД » PostgreSQL » Сгруппировать в JSON данные (Сгруппировать в JSON данные)
Сгруппировать в JSON данные [сообщение #6125] |
Mon, 23 June 2025 23:28  |
polin11
Сообщений: 9 Зарегистрирован: January 2023
|
Junior Member |
|
|
Использую СУБД PostgreSQL.
Просьба помочь написать сложный запрос,
есть таблица Users
User UserDate
Петя 2024-01-01
Петя 2024-01-01
Петя 2026-01-01
Ваня 2025-01-02
Ваня 2025-01-02
Игорь 2025-06-10
В итоге нужен json вида
{
Петя: {
'2024-01-01': 2,
'2026-01-01': 1
}.
Ввня: {
'2025-01-02': 2
}
Игорь: {
'2025-06-10': 1
}
}
Моих знаний хватило только на такой запрос:
WITH tmp AS(
SELECT
COUNT(*) AS "kolvo",
"UserData"
"User"
FROM "Users"
GROUP BY "User", "UserData"
),
tmp1 AS(
SELECT
"User",
array_agg(
json_build_object(
"UserDate"::text, "Kol"
)
) AS "user_json"
GROUP BY "User"
)
SELECT
array_agg(
json_build_object(
"User", "user_json"
)
)
FROM tmp1
Тут в итоге получается массив json, внутри тоже массив из json.
Нужно просто json значения которого тоже json
|
|
|
Re: Сгруппировать в JSON данные [сообщение #6129 является ответом на сообщение #6125] |
Wed, 25 June 2025 21:35  |
BlackEric
Сообщений: 391 Зарегистрирован: June 2022
|
Senior Member |
|
|
/* Исходная таблица
t("User" text, "UserDate" date)
*/
WITH cnt AS ( -- 1. считаем повторы «дата-пользователь»
SELECT "User" AS usr,
"UserDate" AS dt,
COUNT(*) AS qty
FROM t
GROUP BY "User", "UserDate"
), usr_json AS ( -- 2. собираем JSON-объект по каждой персоне
SELECT usr,
jsonb_object_agg(dt::text, qty) AS dates_json
FROM cnt
GROUP BY usr
)
SELECT jsonb_object_agg(usr, dates_json) AS result -- 3. общий объект
FROM usr_json;
Но странноват у вас json.
|
|
|
Переход к форуму:
Текущее время: Mon Jun 30 19:00:36 GMT+3 2025
Общее время, затраченное на создание страницы: 0.01062 секунд
|