Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сгруппировать в JSON данные 
:(
    Опции темы
polin11
Дата 23.6.2025, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 6.6.2015

Репутация: нет
Всего: нет



Сгруппировать в JSON данные

Использую СУБД 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  
PM MAIL   Вверх
Akina
Дата 24.6.2025, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 3
Всего: 454



Код

WITH 
cte1 (UserName, UserDate, UserAmount) AS (
  SELECT "User", UserDate, COUNT(UserDate) 
  FROM Users
  GROUP BY 1, 2
  ),
cte2 (UserName, UserJSON) AS (
  SELECT UserName, json_object_agg(UserDate, UserAmount)
  FROM cte1
  GROUP BY 1
  )
SELECT json_object_agg(UserName, UserJSON) AS FinalJSON
FROM cte2;

step-by-step fiddle

Цитата(polin11 @  24.6.2025,  00:33 Найти цитируемый пост)
Нужно просто json значения которого тоже json  

Не бывает "просто JSON". Или объект, или массив. Или не JSON.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PostgreSQL | Следующая тема »


 




[ Время генерации скрипта: 0.0637 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.