ホームページ >データベース >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 オブジェクトの配列として抽出します

質問:

複数の列を持つテーブルがあり、2 つの列が別の列に従ってグループ化された、各行のオブジェクトの配列を返したいと考えています。ただし、結果には各オブジェクトに余分なキーが含まれるという問題が発生します。目的の出力は、2 つの列のみを持ち、3 番目の列でグループ化されたオブジェクトの配列です。

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>

上記の解決策は、目的の結果、つまり 2 つの列のみを持ち、3 番目の列でグループ化されたオブジェクトの配列を返します。

以上がPostgreSQLで特定の列をオブジェクトのJSON配列として抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。