sql - Postgresql,具有多个键的 jsonb 为每个键返回一行

标签 sql postgresql jsonb

这是我的情况。我有包含 json 列的行,而我一直在尝试做的是仅在一行中获取该 json 中所有键的所有值。

假设我有 json 值的行:

{"key1": "a", "key2": "b"}

现在,是否可以像这样提取值:["a", "b"]

到目前为止我尝试过这个:

select ---- some sum() fields ----,
b.match_data::json -> jsonb_object_keys(b.match_data) as "Course"
from --- tables ---
join -- tables ---
where -- condition ---
group by -- sum() fields ----, b.match_data

问题在于,对于具有多个键的 json,它会返回多行。

最佳答案

demo: db<>fiddle

WITH jsondata AS (
    SELECT '{"key1": "a", "key2": "b"}'::jsonb as data  -- A
)
SELECT jsonb_agg(value)                                 -- C
FROM jsondata, jsonb_each(data)                         -- B

Postgres JSON functions , Postgres (JSON) aggregate functions

A:CTE 处理您的数据

B: jsonb_each 扩展你的数据;结果:

key    value
key1   "a"
key2   "b"

C: jsonb_aggvalue 列聚合到一个具有预期结果的 json 数组中:["a", "b"]


如果您不想将结果作为 json 数组而是作为普通文本数组,您必须将 jsonb_each 更改为 jsonb_each_text 并将 jsonb_agg 更改为 array_agg(参见 fiddle )


我使用 jsonb 作为类型。当然,json 类型也存在所有函数。 ( Postgres JSON types )

关于sql - Postgresql,具有多个键的 jsonb 为每个键返回一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52659944/

相关文章:

postgresql:如何列出索引列?

c# - .Net SqlDataAdapter 和 SQL Server 中的触发器

sql - 如何使用sql server 2005语法指定数据库的名称以获取其表的名称

postgresql - 页面管理员 4 : Cannot edit rows from one table

python - 地理 Django Mac OS X

sql - Python3 将 jsonb 数组插入 Postgresql 9.5

mysql - 有没有办法在表中没有主键的情况下创建外键关系

mysql - 如何将虚拟数据插入MySQL?

postgresql - 如何在 postgresQL 中的 json 值的 array_agg 中组合 DISTINCT 和 ORDER BY

json - 在 Postgres 中解析 JSON