Postgres конвертирует JSON с повторяющимися идентификаторами - PullRequest
2 голосов
/ 01 июня 2019

С помощью этого выберите:

json_agg(json_build_object("id", price::money))

Я получу полученное значение:

[
  {"6" : "$475.00"}, 
  {"6" : "$1,900.00"},
  {"3" : "$3,110.00"},
  {"3" : "$3,110.00"}
]

Я хотел бы вместо данных в этом формате:

{
  "6": ["$475.00","$1,900.00"],
  "3": ["$3,110.00","$3,110.00"]
}

При запросе на сервере или использовании с jsonb идентификаторы дублируются, и только одна из пар ключ-значение проходит через него.

1 Ответ

2 голосов
/ 01 июня 2019

Вы должны агрегировать цены в группах по идентификаторам и использовать функцию агрегирования json_object_agg(). Вы должны использовать производную таблицу (подзапрос в предложении from), потому что агрегаты не могут быть вложенными:

select json_object_agg(id, prices)
from (
    select id, json_agg(price::money) as prices
    from my_table
    group by id
    ) s

Рабочий пример в rextester.

...