如何从 JSON 中提取重复多次的值?

How to extract a value from JSON that repeats multiple times?

我有以下 table:

我需要创建一个 select 让我 returns 像这样的东西:

我试过这个代码:

SELECT Code, json_extract_path(Registers::json,'sales', 'name') 
FROM tbl_registers

前面的代码 returns 我在 json_extract_path 中输入了一个 NULL,我已经尝试过运算符 ::json->'sales'->>'name',但也不起作用。

您需要取消嵌套数组,然后将名称聚合回来。这可以使用 json_array_elements 和标量子查询来完成:

select code, 
       (select string_agg(e ->> 'name', ',')
        from json_array_elements(t.products) as x(e)) as products
from tbl_registers t;

我还强烈建议将您的专栏类型更改为 jsonb

step-by-step demo:db<>fiddle

SELECT
    code,
    string_agg(                                     -- 3
         elems ->> 'name',                          -- 2
         ','
    ) as products
FROM tbl_registers,
    json_array_elements(products::json) as elems    -- 1
GROUP BY code
  1. 如果你有文本类型(严格不推荐,请使用适当的数据类型jsonjsonb),那么你需要将它转换为类型json(我猜你有类型文本,因为您已经在示例代码中进行了转换)。之后,您需要将数组元素提取到每个元素一行
  2. 获取 name
  3. 通过分组重新聚合并使用string_agg()创建字符串列表