首页 > 数据库 > mysql教程 > 如何反转 GROUP_CONCAT 以从 MySQL 中的聚合字符串中提取单个值?

如何反转 GROUP_CONCAT 以从 MySQL 中的聚合字符串中提取单个值?

Mary-Kate Olsen
发布: 2024-12-17 07:24:25
原创
809 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板