Установить результат в столбце как имя столбца

У меня есть такая таблица:

-----------------------------
| cluster | nr | description|
-----------------------------
| A       | 1  | type       |
| A       | 2  | source     |
| A       | 3  | depth      |
| B       | 8  | rise       |
| B       | 12 | cause      |
-----------------------------

И я хотел бы создать такой json:

 { 
    "clusters": {
        "A": [{
               "nr": 1, 
               "description": "type"
           }, {
               "nr": 2, 
               "description": "source"
           }, {
               "nr": 3, 
               "description": "depth"
        }],
        "B": [{
               "nr": 8, 
               "description": "rise"
             }, {
               "nr": 12, 
               "description": "cause"
        }]
    }
 }

Итак, до сих пор я пытался сделать это:

select row_to_json(t)
from (
    SELECT cluster, nr, description
    FROM mytable
) t


select row_to_json(t)
from (
    select array_agg(d.cluster) as cluster
    from (
        SELECT cluster, surveynr, description
        FROM events.clusterbyactivescores 
    ) d
) t

и еще кое-что, что я забыл .. ни один из них, кажется, не помогает.

Как лучше всего это сделать?

заранее спасибо

Это помогает? stackoverflow.com/questions/49742397/…

404 11.04.2018 12:54
2
1
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте тип jsonb, так как он имеет оператор -, что позволяет построить компактный и элегантный запрос:

select jsonb_build_object('clusters', jsonb_object_agg(cluster, obj))
from (
    select 
        cluster, 
        jsonb_agg(to_jsonb(t) - 'cluster') as obj
    from my_table t
    group by 1
    ) s

Другие вопросы по теме