ホームページ >データベース >mysql チュートリアル >GROUP_CONCAT を逆にして、MySQL で集計された文字列から個々の値を抽出するにはどうすればよいですか?

GROUP_CONCAT を逆にして、MySQL で集計された文字列から個々の値を抽出するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-17 07:24:25816ブラウズ

How Can I Reverse GROUP_CONCAT to Extract Individual Values from Aggregated Strings in MySQL?

GROUP_CONCAT の解明: 集計データからの個別の値の抽出

データベース管理の領域では、GROUP_CONCAT 関数は複数のデータを集計するための強力なツールです。値を単一のカンマ区切り文字列に変換します。ただし、これらの集約された文字列を個々のコンポーネントに分解するという、逆の課題に直面する場合もあります。

問題の本質

次のデータを考慮してください。 「colors」という名前のテーブル:

| id | colors               |
|----+----------------------|
| 1  | Red,Green,Blue       |
| 2  | Orangered,Periwinkle |

あなたの目標は、このデータを、それぞれがcolor は別の行として表されます:

| id | colors     |
|----+------------|
| 1  | Red        |
| 1  | Green      |
| 1  | Blue       |
| 2  | Orangered  |
| 2  | Periwinkle |

解決策: 文字列の解明

MySQL は、このタスクを実行するためのいくつかのテクニックを提供します。 1 つのアプローチでは、次のように SUBSTRING_INDEX 関数と SUBSTRING 関数を利用します。

SELECT
  id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(colors, ',', n.digit+1), ',', -1) color
FROM
  colors
  INNER JOIN
  (SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) n
  ON LENGTH(REPLACE(colors, ',' , '')) <= LENGTH(colors)-n.digit
ORDER BY
  id,
  n.digit

このクエリは次のように動作します。

  1. SUBSTRING_INDEX を使用して、カンマ内の各色の開始位置と終了位置を検索します。区切られた文字列。
  2. 対応する数値を生成するテーブルとの結合
  3. 色の数が結合テーブルの範囲を超える行をフィルタリングします。
  4. 結果を ID と色の位置で並べ替えます。

謎の解明: 逆集計またはUn-GROUP_CONCAT

上記の操作は、「逆集約」または「un-GROUP_CONCAT」と呼ばれることがよくあります。これにより、以前に集計または連結されたデータから個々の値を抽出して分離できます。この手法は、集計自体ではなく個々のデータ ポイントに対してさらなる分析や変換を実行する必要がある場合に特に役立ちます。

以上がGROUP_CONCAT を逆にして、MySQL で集計された文字列から個々の値を抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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