首頁 >資料庫 >mysql教程 >如何反轉 GROUP_CONCAT 以從 MySQL 中的聚合字串中提取單一值?

如何反轉 GROUP_CONCAT 以從 MySQL 中的聚合字串中提取單一值?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-17 07:24:25811瀏覽

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 |

您的目標是將這有些資料轉換為表示每個顏色的結構作為單獨的行:

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

解:解開字串

MySQL提供了多種技術來完成此任務。一種方法利用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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn