ホームページ > データベース > mysql チュートリアル > PostgreSQL の「group by」クエリ内で文字列を連結するにはどうすればよいですか?

PostgreSQL の「group by」クエリ内で文字列を連結するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-22 08:41:09
オリジナル
807 人が閲覧しました

How to Concatenate Strings within a PostgreSQL `group by` Query?

PostgreSQL の文字列フィールドを連結します group by クエリ

PostgreSQL データベース内のデータを処理する場合、group by クエリ内の特定のフィールドの文字列を連結する必要がある場合があります。これは、PostgreSQL のバージョンに応じてさまざまな方法で実現できます。

PostgreSQL 9.0 以降

最新の PostgreSQL バージョン (2010 年以降にリリース) は string_agg(expression, delimiter) 関数を提供します。この関数を使用すると、group by クエリ内の文字列を指定された区切り文字で区切って連結できます。

たとえば、各 COMPANY_ID グループの EMPLOYEE フィールドを結合するには、次のクエリを使用できます:

<code class="language-sql">SELECT company_id, string_agg(employee, ', ')
FROM mytable
GROUP BY company_id;</code>
ログイン後にコピー

PostgreSQL 8.4.x

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.x 以前のバージョン

古い PostgreSQL バージョンには、文字列連結のための組み込み集計関数がありません。カスタム実装の 1 つは、textcat 関数を使用したカスタム集計関数の作成です。

<code class="language-sql">CREATE AGGREGATE textcat_all(
  basetype    = text,
  sfunc       = textcat,
  stype       = text,
  initcond    = ''
);</code>
ログイン後にコピー

さらに、null 値や空の文字列を無視するなど、特定のニーズに対応するカスタム接続関数を作成できます。

<code class="language-sql">CREATE FUNCTION commacat_ignore_nulls(acc text, instr text) RETURNS text AS $$
  BEGIN
    IF acc IS NULL OR acc = '' THEN
      RETURN instr;
    ELSIF instr IS NULL OR instr = '' THEN
      RETURN acc;
    ELSE
      RETURN acc || ', ' || instr;
    END IF;
  END;
$$ LANGUAGE plpgsql;</code>
ログイン後にコピー

この関数を使用すると、クエリを次のように変更できます:

<code class="language-sql">SELECT company_id, commacat_ignore_nulls(employee)
FROM mytable
GROUP BY company_id;</code>
ログイン後にコピー

以上がPostgreSQL の「group by」クエリ内で文字列を連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート