【问题标题】:JSONB sort aggregationJSONB 排序聚合
【发布时间】:2019-10-13 20:14:28
【问题描述】:

感谢here 的回答,我找到了适合我需要的查询,以便对 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;

正如我们所见,这适用于不太符合我需要的硬编码数据。我似乎不知道如何用表中的 jsonb 列替换 JSON 数据。

我在下面的尝试产生“数据未定义”

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

【问题讨论】:

    标签: sql arrays json postgresql jsonb


    【解决方案1】:

    你快到了。您只需要引入原始表格,如下所示:

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

    Updated DB Fiddle

    【讨论】:

    • 感谢您的快速回答,我不确定如何引入原始表来访问数据列。它似乎可以按需工作!
    • 欢迎@SterlingArcher!您的问题问得很好,而且您非常接近,这样更容易快速回复!
    猜你喜欢
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多