JSONB 排序聚合

JSONB sort aggregation

由于这个答案,我发现这个查询适合我的需要,以便对 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;

如我们所见,这适用于不太符合我需要的硬编码数据。我似乎无法弄清楚如何用 table.

中的 jsonb 列替换 JSON 数据

我的以下尝试产生了 'data is not defined'

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,可帮助描述 table 以及结构的定义方式:http://sqlfiddle.com/#!17/41102/92

你快到了。你只需要引入原始的 table,像这样:

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

Updated DB Fiddle