gpt4 book ai didi

python - PostgreSQL JSON - 嵌套列表的子集

转载 作者:行者123 更新时间:2023-11-29 13:12:49 26 4
gpt4 key购买 nike

我在 PostgreSQL 数据库中有一个列,它基本上是一个 python 元组的 jsonified 列表:

[
["Mobile","111-111-1111"],
["Office","222-222-2222"],
["Mobile","333-333-3333"],
["Fax","444-444-4444"],
]

我想构造一个查询,该查询根据每个嵌套列表中的第一个值返回列表的子集。下面是一个伪查询,希望能说明我所追求的:

SELECT
foo AS bar,
(SELECT
element
FROM
phone_numbers
WHERE
element::json->>0 = "Mobile") AS mobile_numbers
FROM
db
;

mobile_numbers == [["Mobile","111-111-1111"],["Mobile","333-333-3333"]]

我只知道 PostgreSQL(和一般的 SQL 查询)中关于 json 运算符的点点滴滴,主要是在字典方面。我可以在这里找到许多关于如何深入了解嵌套字典并返回一个值的示例,但我还没有找到任何与我所追求的完全匹配的东西。

感谢您的帮助。

最佳答案

假设该列包含有效的 json 作为数组的数组,您应该使用 jsonb_array_elements() 取消嵌套外部数组, 按第一个(索引 0)元素过滤内部数组 (元组) 并使用 jsonb_agg(). 聚合结果

with my_table(phone_numbers) as (
values
('[
["Mobile","111-111-1111"],
["Office","222-222-2222"],
["Mobile","333-333-3333"],
["Fax","444-444-4444"]
]'::jsonb)
)

select jsonb_agg(phone)
from my_table
cross join jsonb_array_elements(phone_numbers) as arr(phone)
where phone->>0 = 'Mobile'

jsonb_agg
----------------------------------------------------------
[["Mobile", "111-111-1111"], ["Mobile", "333-333-3333"]]
(1 row)

关于python - PostgreSQL JSON - 嵌套列表的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52748337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com