ホームページ > データベース > mysql チュートリアル > SQL を使用して複数の行を 1 つの行に連結するにはどうすればよいですか?

SQL を使用して複数の行を 1 つの行に連結するにはどうすればよいですか?

DDD
リリース: 2025-01-15 08:48:43
オリジナル
172 人が閲覧しました

How Can I Concatenate Multiple Rows into a Single Row Using SQL?

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>
ログイン後にコピー

内訳は次のとおりです:

  1. string_agg(actor::text, ', '): この部分は、区切り文字としてカンマとスペースを使用して、actor 列の値を連結します。 ::text は、actor 列をテキストに明示的にキャストします。これは、列がまだテキスト データ型でない場合に必要です。
  2. GROUP BY movie: これにより、行が movie 列ごとにグループ化され、同じ映画の俳優が確実に一緒に集約されます。
  3. 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 サイトの他の関連記事を参照してください。

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