PostgreSQL で複数のレコードと 1 つの ID のフィールド値を連結する
多くのデータベース アプリケーションでは、単一の識別子に関連する複数の値を単一の接続文字列に結合する必要があります。この操作は、一意の ID ごとに複数のレコードを含むテーブルをクエリする場合に特に便利です。
MySQL の GROUP_CONCAT 関数
MySQL では、GROUP_CONCAT 関数がこの目標を達成する直接的な方法を提供します。ただし、GROUP_CONCAT 関数は PostgreSQL では直接使用できません。
GROUP_CONCAT に相当する PostgreSQL
PostgreSQL では、string_agg 関数は MySQL の GROUP_CONCAT に相当します。この関数を使用すると、連結された値を区切るための区切り文字 (カンマなど) を指定しながら文字列を連結できます。
例: string_agg を使用した PostgreSQL クエリ
元の質問で提供されたテーブルの例を考えてみましょう:
id | some_column |
---|---|
TM67 | 4 |
TM67 | 9 |
TM67 | 72 |
TM99 | 2 |
TM99 | 3 |
次の PostgreSQL クエリを使用して、一意の ID ごとに some_column 列の値を連結できます。
<code class="language-sql">SELECT id, string_agg(some_column::text, ',') AS values FROM the_table GROUP BY id;</code>
結果:
id | values |
---|---|
TM67 | 4,9,72 |
TM99 | 2,3 |
このクエリは、一意の ID ごとに 1 行を取得し、some_column 列の値をカンマを区切り文字として単一の文字列に連結します。
注: string_agg 関数は PostgreSQL バージョン 9.0 で導入されました。 PostgreSQL の以前のバージョンでは、generate_series または group_concat_agg 拡張機能を代わりに使用して、同じ機能を実現できます。 some_column::text
の型変換により、some_column
がテキスト型でない場合でも、正しく連結されることが保証されます。
以上がPostgreSQL で複数のレコードのフィールド値を 1 つの ID で連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。