Postgresql: нужно получить значение в формате Json - PullRequest
0 голосов
/ 01 ноября 2018

Я хотел получить это значение JSON (общее количество crm_call_log на пользователя).

{series: [{'user_id': 1, 'count': 2}, {'user_id': 3, 'count': 1}], xaxis: ['User1', 'User3']}

У меня есть две таблицы,

res_users

| id |  name |
|----|-------|
|  1 | User1 |
|  2 | User2 |
|  3 | User3 |

crm_call_log

| id | user_id |                            name |
|----|---------|---------------------------------|
|  1 |       1 |               Did not connected |
|  2 |       1 |                  Call connected |
|  3 |       3 | Call connected, but doesn't won |

Я попробовал

select 
    array_to_json(array_agg(B)) 
from (
    select 
        array_to_json(array_agg(A)) as series
    from (
        select 
            user_id as id,
            count(id) as value
        from crm_call_log
        group by user_id
        order by 2 desc
    ) as A
) as B

Итак, наконец, я получаю этот вывод

[{"series":[{"id":1,"value":2},{"id":3,"value":1}]}]

Так что кто-нибудь поможет мне в этом, спасибо заранее.

1 Ответ

0 голосов
/ 01 ноября 2018

демо: дб <> скрипка

SELECT 
    row_to_json(s)                                     -- 5
FROM (
    SELECT 
        json_agg(                                      -- 4
            json_build_object('user_id', user_id, 'count', count) -- 3
        ) as series,
        json_agg(rs.name) as xaxis                     -- 4
    FROM (
        SELECT ccl.user_id, COUNT(*)                   -- 1 
        FROM crm_call_log ccl 
        GROUP BY ccl.user_id
    )s
    JOIN res_users rs                                  -- 2
    ON s.user_id = rs.id
)s
  1. Группировка user_id в таблице crm_call_log для подсчета
  2. присоединяется res_users, чтобы получить name s для user_id s
  3. json_build_object создает элементы json, такие как {'user_id': 1, 'count': 2}
  4. json_agg объединяет объект json из (3) и пользователя name s в массивы json
  5. row_to_json создает один единственный объект json из подзапроса с именами столбцов в качестве ключей.

Агрегаты Postgres JSON , Функции Postgres JSON

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...