ホームページ >データベース >mysql チュートリアル >PostgreSQLで特定の列をオブジェクトのJSON配列として抽出するにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。