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