ホームページ >データベース >mysql チュートリアル >PostgreSQL でグループ化されたフィールドから文字列を連結するにはどうすればよいですか?

PostgreSQL でグループ化されたフィールドから文字列を連結するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-22 08:31:09287ブラウズ

How to Concatenate Strings from a Grouped Field in PostgreSQL?

PostgreSQL データベースでは、特定のフィールドでグループ化し、各グループ内の別の文字列フィールドの値を連結することが一般的な要件です。実装方法はPostgreSQLのバージョンによって異なります。

PostgreSQL 9.0 以降

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

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.3 以前

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 サイトの他の関連記事を参照してください。

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