Mysql GROUP_CONCAT与CONCAT_WS配合使用单选、多选拼接

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: Mysql GROUP_CONCAT与CONCAT_WS配合使用单选、多选拼接

举例1

可以使用IF函数将单选和多选的值分别拼接,并在最后的结果中使用CONCAT_WS函数将它们合并:


id                   colors

1                       1

2                           2

3                       3

4                      4,5

5                    1,2,3

6                    2,3,4,5

我们想要的结果为1;2;3;4,5。。。。。。

下面开始测试

SELECT 
  CONCAT_WS('; ',
    GROUP_CONCAT(IF(INSTR(colors, ',') > 0, NULL, colors)),
    GROUP_CONCAT(IF(INSTR(colors, ',') > 0, colors, NULL))
  ) AS all_colors
FROM colors;


在这个例子中,IF(INSTR(colors, ',') > 0, NULL, colors)函数将单选的值返回,IF(INSTR(colors, ',') > 0, colors, NULL)函数将多选的值返回。然后,GROUP_CONCAT函数将它们分别拼接。最后,CONCAT_WS函数使用分号将它们合并在一起。

输出打印

| all_colors  |
|-------------|
| 1; 2; 3; 4,5 |

在这个结果中,单选的值(1、2、3)使用分号拼接,多选的值(4,5)使用逗号拼接,符合你的要求。

举例2

按照例子1的表格延续一个type字段:single,multiple,用于判断多选还是单选


SELECT 
  CONCAT_WS('; ',
    GROUP_CONCAT(
      IF(type = 'single', colors, NULL)
    ),
    GROUP_CONCAT(
      IF(type = 'multiple', 
         GROUP_CONCAT(SUBSTRING_INDEX(value, ',', 1) SEPARATOR ','),
         NULL
      )
    ),
    IF(GROUP_CONCAT(IF(type = 'single', colors, NULL)) REGEXP '[^,]$',
       ',', 
       ''
    ),
    GROUP_CONCAT(
      IF(type = 'multiple', 
         SUBSTRING_INDEX(value, ',', -1),
         NULL
      )
    )
  ) AS all_colors
FROM colors
GROUP BY type;

在这个查询中,我使用了IF函数和GROUP_CONCAT函数来判断每个值的类型,并将它们拼接起来。如果值是单选的,则直接将它们拼接在一起,如果是多选的,则将它们按逗号分隔后再拼接起来。


查询结果将会是:

| all_colors  |
|-------------|
| 1; 2; 3     |
| 4,5         |


举例3

跟举例2一样,我们只是怕拼接的方式合并在一起


将单选和多选的值拼接在一起,并用分号分隔,你可以在查询中使用CONCAT_WS函数来实现。以下是一个示例查询,用于将单选和多选的值按要求拼接:


SELECT 
  CONCAT_WS('; ',
    GROUP_CONCAT(
      IF(type = 'single', colors, NULL)
    ),
    GROUP_CONCAT(
      IF(type = 'multiple', 
         GROUP_CONCAT(SUBSTRING_INDEX(value, ',', 1) SEPARATOR ','),
         NULL
      )
    ),
    IF(GROUP_CONCAT(IF(type = 'single', colors, NULL)) REGEXP '[^,]$',
       ',', 
       ''
    ),
    GROUP_CONCAT(
      IF(type = 'multiple', 
         SUBSTRING_INDEX(value, ',', -1),
         NULL
      )
    )
  ) AS all_colors
FROM colors;

在这个查询中,我将单选和多选的值拼接在一起,并用分号分隔。具体来说,我使用了CONCAT_WS函数将两个拼接后的字符串用分号连接起来。


查询结果将会是:

| all_colors      |
|-----------------|
| 1; 2; 3; 4,5     |
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
关系型数据库 MySQL 数据库
MySql GROUP_CONCAT使用说明
MySql GROUP_CONCAT使用说明
|
9天前
|
JSON 关系型数据库 MySQL
MySQL中GROUP_CONCAT与JSON_OBJECT、GROUP BY的巧妙结合:打造高效JSON数组汇总
MySQL中GROUP_CONCAT与JSON_OBJECT、GROUP BY的巧妙结合:打造高效JSON数组汇总
10 1
|
11天前
|
SQL 关系型数据库 MySQL
mysql中GROUP_CONCAT函数详解
mysql中GROUP_CONCAT函数详解
15 0
|
2月前
|
关系型数据库 MySQL
MySQL中CONCAT() ,CONCAT_WS() ,GROUP_CONCAT()的用法
MySQL中CONCAT() ,CONCAT_WS() ,GROUP_CONCAT()的用法
24 2
|
2月前
|
关系型数据库 MySQL Java
MySQL group by分组后,将每组所得到的id拼接起来
MySQL group by分组后,将每组所得到的id拼接起来
45 0
|
2月前
|
SQL 前端开发 关系型数据库
Mysql拼接查询结果
Mysql拼接查询结果
35 0
|
10月前
|
SQL 关系型数据库 MySQL
MySQL中concat()、concat_ws()、group_concat()三个函数的使用技巧案例与心得总结
MySQL中concat()、concat_ws()、group_concat()三个函数的使用
97 0
MySQL中concat()、concat_ws()、group_concat()三个函数的使用技巧案例与心得总结
|
11月前
|
前端开发 关系型数据库 MySQL
数据合并与分隔:解析MySQL中的GROUP_CONCAT()函数
在数据库管理中,将多行数据合并成一行并以特定分隔符进行分隔,常用于生成逗号分隔的列表等情况。GROUP_CONCAT()函数就是帮助我们实现这一目标的工具。
365 0
|
关系型数据库 MySQL
Mysql拼接字段且使用别名
Mysql拼接字段且使用别名
133 1
|
12月前
|
关系型数据库 MySQL PHP
php将数组转化成拼接IN字符串实现mysql使用where in 用法
php将数组转化成拼接IN字符串实现mysql使用where in 用法
60 0