JSONB сортировка агрегации - PullRequest
1 голос
/ 13 октября 2019

Я нашел этот запрос, который соответствует моим потребностям, благодаря этому ответу здесь для сортировки полей данных в документе JSON.

(Поддельные, сгенерированные случайные данные)

SELECT jsonb_agg(elem)
FROM  (
   SELECT *
   FROM   jsonb_array_elements('[{
        "id": "1",
        "first_name": "Maximo",
        "last_name": "Sambiedge",
        "email": "msambiedge0@economist.com",
        "gender": "Male",
        "ip_address": "242.145.232.65"
    }, {
        "id": "2",
        "first_name": "Maria",
        "last_name": "Selland",
        "email": "aselland1@sitemeter.com",
        "gender": "Female",
        "ip_address": "184.174.58.32"
   }]') a(elem)
   ORDER  BY (elem->>'email')  -- order by integer value of "ts"
) sub;

Как мы видим, это работает с жестко закодированными данными, которые не совсем соответствуют моим потребностям. Кажется, я не могу понять, как заменить данные JSON столбцом jsonb в моей таблице.

Моя попытка, приведенная ниже, выдает «данные не определены»

SELECT jsonb_agg(elem), (SELECT data FROM file_metadata)
FROM  (
   SELECT *
   FROM   jsonb_array_elements(data) a(elem)
   ORDER  BY (elem->>'email')
) sub;

Мои подозрениячто подзапрос необходим внутри предложения FROM?

Вот SQLFiddle моей проблемы, чтобы помочь описать таблицу и как определяется структура: http://sqlfiddle.com/#!17/41102/92

1 Ответ

1 голос
/ 13 октября 2019

Вы почти у цели. Вам просто нужно внести исходную таблицу, например, так:

SELECT jsonb_agg(elem)
FROM  (
   SELECT elem
   FROM file_metadata, jsonb_array_elements(data) a(elem)
   ORDER BY (elem->>'email')
) sub;

Обновлена ​​скрипта DB

...