SQL を使用して複数の行を 1 つの行に結合する
多くのデータベース タスクでは、1 つの列に同じ値を持つ複数の行を 1 つの行にマージし、別の列の値を連結する必要があります。 映画ごとに俳優が別々の行にリストされている映画データベースを想像してください。
<code>Movie | Actor ---------------- A 1 A 2 A 3 B 4</code>
目標は、次のような結果セットを作成することです:
<code>Movie | ActorList ---------------- A 1, 2, 3 B 4</code>
統合に文字列集約を使用する
SQL の string_agg
関数は効率的なソリューションを提供します。この集計関数は、指定された列の値を連結します。クエリは次のとおりです:
<code class="language-sql">SELECT movie, string_agg(actor::text, ', ') AS actor_list FROM tbl GROUP BY movie;</code>
内訳は次のとおりです:
string_agg(actor::text, ', ')
: この部分は、区切り文字としてカンマとスペースを使用して、actor
列の値を連結します。 ::text
は、actor
列をテキストに明示的にキャストします。これは、列がまだテキスト データ型でない場合に必要です。GROUP BY movie
: これにより、行が movie
列ごとにグループ化され、同じ映画の俳優が確実に一緒に集約されます。actor_list
: これは、結果として得られる連結文字列のエイリアスです。機能拡張と考慮事項:
::text
など) を使用します。ORDER BY
の中に string_agg
を追加します:<code class="language-sql">SELECT movie, string_agg(actor::text, ', ' ORDER BY actor) AS actor_list FROM tbl GROUP BY movie;</code>
このクエリ内ソートは、通常、最終結果セットをソートするよりも効率的です。
このアプローチでは、複数の行が 1 つのより管理しやすい行に効果的に統合され、データ分析とレポート作成が簡素化されます。
以上がSQL を使用して複数の行を 1 つの行に連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。