ホームページ >データベース >mysql チュートリアル >PostgreSQL でグループ化されたフィールドから文字列を連結するにはどうすればよいですか?
PostgreSQL データベースでは、特定のフィールドでグループ化し、各グループ内の別の文字列フィールドの値を連結することが一般的な要件です。実装方法はPostgreSQLのバージョンによって異なります。
PostgreSQL 9.0 以降 (2010 年以降) は、この目的のために string_agg(expression, delimiter)
関数を提供します。 EMPLOYEE
という名前の文字列フィールド内の文字列を連結するには、次のクエリを使用できます:
<code class="language-sql">SELECT company_id, string_agg(employee, ', ') FROM mytable GROUP BY company_id;</code>
集計式で ORDER BY
句を指定して、値が連結される順序を制御することもできます。
PostgreSQL 8.4 では、値を配列に収集する array_agg(expression)
集計関数が導入されました。連結された文字列を取得するには、array_to_string()
関数を使用できます:
<code class="language-sql">SELECT company_id, array_to_string(array_agg(employee), ', ') FROM mytable GROUP BY company_id;</code>
PostgreSQL 8.4 より前には、文字列を連結するための組み込み集計関数はありませんでした。カスタム集計関数は、CREATE AGGREGATE
ステートメントを使用して作成できます:
<code class="language-sql">CREATE AGGREGATE textcat_all( basetype = text, sfunc = textcat, stype = text, initcond = '' );</code>
この基本的な集計関数は、グループ内のすべての文字列を単純に連結します。連結された値の間に区切り文字を追加するカスタム関数を作成することもできます。例:
<code class="language-sql">CREATE FUNCTION commacat(acc text, instr text) RETURNS text AS $$ BEGIN IF acc IS NULL OR acc = '' THEN RETURN instr; ELSE RETURN acc || ', ' || instr; END IF; END; $$ LANGUAGE plpgsql;</code>
その後、GROUP BY
クエリでカスタム集計関数を使用して文字列を連結できます。
<code class="language-sql">SELECT company_id, textcat_all(commacat(NULL, employee)) AS concatenated_employees FROM mytable GROUP BY company_id;</code>
以上がPostgreSQL でグループ化されたフィールドから文字列を連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。