【问题标题】:Aggregate results based on array of strings in JSON?基于JSON中的字符串数组聚合结果?
【发布时间】:2019-09-04 15:11:33
【问题描述】:

我有一个表,其中包含一个名为“关键字”的字段。它是一个带有关键字元数据数组的 JSONB 字段,包括关键字的名称。

我想要的是按名称查询所有这些关键字的计数,即聚合关键字名称和count(id)。我能找到的所有 GROUP BY 查询示例都导致分组出现在完整列表中(即只给我计算两条记录具有相同关键字集的情况)。

那么是否有可能以某种方式扩展关键字列表以使我获得这些计数?

如果没有,我仍处于规划阶段,可以重构我的架构以更好地处理此问题。

  "keywords": [
    {
      "addedAt": "2017-04-07T21:11:00+0000",
      "addedBy": {
        "email": "foo@bar.com"
      },
      "keyword": {
        "name": "Animal"
      }
    },
    {
      "addedAt": "2017-04-07T20:54:00+0000",
      "addedBy": {
        "email": "foo@bar.comm"
      },
      "keyword": {
        "name": "Mammal"
      }
    }
  ]

【问题讨论】:

    标签: postgresql jsonb


    【解决方案1】:

    step-by-step demo:db<>fiddle

    SELECT
        elems -> 'keyword' ->> 'name' AS keyword,             -- 2
        COUNT(*) AS count
    FROM
        mytable t,
        jsonb_array_elements(myjson -> 'keywords') AS elems   -- 1
    GROUP BY 1                                                -- 3
    
    1. 将数组记录扩展为每个元素一行
    2. 获取关键字的名称
    3. 对这些文本值进行分组。

    【讨论】:

    • @deed02392 这有帮助吗?以防万一,请不要忘记点赞并接受
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 2011-06-14
    • 2017-06-25
    • 1970-01-01
    相关资源
    最近更新 更多