SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » PostgreSQL » Сгруппировать в JSON данные (Сгруппировать в JSON данные)
Сгруппировать в JSON данные [сообщение #6125] Mon, 23 June 2025 23:28 Переход к следующему сообщению
polin11 в настоящее время не в онлайне  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 в настоящее время не в онлайне  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.
Предыдущая тема: подзапрос в условном выражении
Следующая тема: Как правильно написать json запрос на PostgreeSQL
Переход к форуму:
  


Текущее время: Mon Jun 30 07:36:49 GMT+3 2025

Общее время, затраченное на создание страницы: 0.00651 секунд