我使用的是postgres,并且我在一个数组中有多个jsonb条目,该数组位于一个名为Observation的列中.它们被输入为 '[{"a": 1}, {"b": 2}, {"c": 0.5}]'::jsonb. 有多行,每行中都有多个json元素.我想把它们合并成一行的一个大条目,这样我就只能对一列进行一次观察.

我试过以下几种方法

INSERT INTO data
SELECT jsonb_agg(observation) AS concatenated_json
FROM (
  SELECT observation
  FROM test
) AS subquery;

但我得到的结果是一个数组array.我不想得到多个数组,只想得到一个.

推荐答案

INSERT INTO data
SELECT jsonb_agg(s.elements) FROM (
    SELECT jsonb_array_elements(observation) FROM test
) AS s(elements);

使用jsonb_array_elements()将json数组扩展为一组json值.例如:

[{"a": 1}, {"b": 2}, {"c": 0.5}]
[{"d": 2.2}, {"e": 2.4}, {"f": 3.5}]
[{"g": 1.7}, {"h": 5.4}, {"i": 8.9}]

(3行)

将转换为9行json值:

{"a": 1}
{"b": 2}
{"c": 0.5}
{"d": 2.2}
{"e": 2.4}
{"f": 3.5}
{"g": 1.7}
{"h": 5.4}
{"i": 8.9}

然后,我们使用jsonb_agg()将json值聚合到表data中,以输出一行:

[{"a": 1}, {"b": 2}, {"c": 0.5}, {"d": 2.2}, {"e": 2.4}, {"f": 3.5}, {"g": 1.7}, 
{"h": 5.4}, {"i": 8.9}]

Sql相关问答推荐

用于平均多个数据并与一个数据点进行比较以判断偏移量的SQL查询

解析键-值对,根据值 Select ,并使用SQL创建新列

基于前面行的值:当x&>2时重复1,当连续3行x=0时则重复0

Access VBA SQL命令INSERT FOR MULTIME VALUE

根据开始日期和结束日期的差异计算每天的计费

关于Postgres横向联接的谓词

了解多个分组集

如何为缺少的类别添加行

在Postgres,什么是;.USSTZ;在';YYYY-MM-DD;T;HH24:MI:SS.USSTZ';?

对现有记录进行分组

POSTGRES to_timestamp() 假定 UTC 字符串为本地时间

递归 CTE 附加为行

我们可以使用连接改进包含多个子查询的查询吗

如何在TSQL中编写此窗口查询

比使用NOT EXISTS更高效的SQL删除方法是什么?

COBOL\DB2作业(job)需要帮助?快来获取专业指导!

BigQuery Pivot 遗漏行

如何根据 Amazon Athena 中的多个列值删除重复行?

Postgres 窗口函数未按预期工作

在 MindsDB SQL 编辑器中运行 PostgreSQL 条目 ID 时出现未知 Select 目标错误