首页 >数据库 >mysql教程 >如何在 PostgreSQL 中提取特定列作为 JSON 对象数组?

如何在 PostgreSQL 中提取特定列作为 JSON 对象数组?

Linda Hamilton
Linda Hamilton原创
2025-01-14 21:57:43820浏览

How to Extract Specific Columns as a JSON Array of Objects in PostgreSQL?

从PostgreSQL表中提取特定列作为JSON对象数组

问题:

您有一个包含多列的表,希望为每一行返回一个对象数组,其中两列根据另一列分组。但是,您会遇到一个问题,即结果在每个对象中包含一个额外的键。期望的输出是一个仅包含两列的对象数组,并按第三列分组。

PostgreSQL 10 解决方案:

对于PostgreSQL 10及以上版本,可以使用-运算符从jsonb对象中删除单个键(或PostgreSQL 10 中的键数组),然后再进行聚合。

<code class="language-sql">SELECT val2, jsonb_agg(to_jsonb(t.*) - '{id, val2}'::text[]) AS js_34
FROM   tbl t
GROUP  BY val2;</code>

PostgreSQL 9.4 解决方案:

在PostgreSQL 9.4及以上版本中,您可以使用jsonb_build_object()json_build_object()从交替的键和值创建JSON对象。

<code class="language-sql">SELECT val2, jsonb_agg(jsonb_build_object('val3', val3, 'val4', val4)) AS js_34
FROM   tbl
GROUP  BY val2;</code>

PostgreSQL 9.3 解决方案:

对于PostgreSQL 9.3及以上版本,可以使用to_jsonb()和ROW表达式来创建JSON对象。您也可以使用子查询代替ROW表达式。

<code class="language-sql">SELECT val2, jsonb_agg(to_jsonb((val3, val4))) AS js_34
FROM   tbl
GROUP  BY val2;

SELECT val2, jsonb_agg(to_jsonb((SELECT t FROM (SELECT val3, val4) t))) AS js_34
FROM   tbl
GROUP  BY val2;</code>

以上解决方案将返回期望的结果:一个仅包含两列的对象数组,并按第三列分组。

以上是如何在 PostgreSQL 中提取特定列作为 JSON 对象数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn