ホームページ >データベース >mysql チュートリアル >DB2 でグループごとにカンマ区切りのリストを生成するにはどうすればよいですか?

DB2 でグループごとにカンマ区切りのリストを生成するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-09 14:41:43133ブラウズ

How to Generate Comma-Separated Lists in DB2 by Group?

LISTAGG を使用した DB2 でのカンマ区切りリストの生成

このガイドでは、DB2 で別の列ごとにグループ化された列値のカンマ区切りリストを作成する方法を説明します。 LISTAGG 関数はこれを達成するための鍵となります。

シナリオ:

ID 列と Role 列を持つテーブルを想像してください。各 ID には複数の Roles を含めることができます。目標は、一意の ID ごとにロールのカンマ区切りリストを出力することです。

データ例:

ID Role
4555 2
4555 3
4555 4

必要な出力:

<code>4555, 2,3,4</code>

LISTAGG を使用した解決策:

DB2 の LISTAGG 関数は、グループ内の値を効率的に連結します。 構文は次のとおりです:

<code class="language-sql">LISTAGG(column_name, delimiter) WITHIN GROUP (ORDER BY column_name) OVER (PARTITION BY group_column)</code>

クエリの例:

myTable 列と id 列を持つ category という名前のサンプル テーブルを使用してみましょう。

<code class="language-sql">CREATE TABLE myTable (id INT, category INT);

INSERT INTO myTable VALUES (1, 1);
INSERT INTO myTable VALUES (2, 2);
INSERT INTO myTable VALUES (5, 1);
INSERT INTO myTable VALUES (3, 1);
INSERT INTO myTable VALUES (4, 2);</code>

id のカンマ区切りの category 値を取得するには:

<code class="language-sql">SELECT
  category,
  LISTAGG(id, ', ') WITHIN GROUP (ORDER BY id ASC) AS ids
FROM myTable
GROUP BY category;</code>

結果:

<code>CATEGORY | IDS
---------+-----
       1 | 1, 3, 5
       2 | 2, 4</code>

このクエリは、行を category でグループ化し、各グループ内の id 値を並べ替えてから、LISTAGG を使用してそれらを単一のカンマ区切り文字列に連結します。 結果には、各カテゴリの ID のカンマ区切りリストが表示されます。 このアプローチは、DB2 のグループ化に基づいてコンマ区切りリストを生成する問題を効果的に解決します。

以上がDB2 でグループごとにカンマ区切りのリストを生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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