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

2023-05-16

举例1

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

idcolors
11
22
33
44,5
51,2,3
62,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     |
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql GROUP_CONCAT与CONCAT_WS配合使用单选、多选拼接 的相关文章

随机推荐

  • ssm整合时,通过jdbc.properties文件无法连接mysql问题

    最近在重温ssm框架 在搭建基础的项目进行单元测试时 xff0c 发现无法连接mysql数据库 通过各种查资料终于发现了原因 原始jdbc properties文件 由于username这个属性会被系统的username变量覆盖 xff0c
  • Mysql数据库之左连接left join 右连接right join 内连接inner join

    最近 xff0c 公司的用户达到了700 43 万 xff0c 意味着数据库已经达到700 43 万 xff0c 聊聊傻傻分不清的连接查询吧 xff01 前提 数据库中一共有三个表 class book phone 而且每个数据库表中都有1
  • VMware虚拟机软件,配置Linux Ubuntu操作系统环境,及安装问题总结大全

    文章目录 1 xff1a 前言2 xff1a 基本认识3 下载环境4 xff1a VM虚拟机的安装5 xff1a ubuntu的下载6 xff1a 把ubuntu安装在VM虚拟机上7 VMware Tools工具8 Source insig
  • linux常用命令(Beginner note)

    命令 ls 列出所有文件及文件夹 ls 路径 xff1a 列出所给路径下的所有文件及文件夹 选项 xff1a xff08 可组合使用 xff0c 也可简写组合形式 xff0c 例 xff1a alh xff0c 无先后顺序 xff09 a
  • 利用JS-SDK微信分享接口调用(后端.NET)

    一直都想研究一下JS SDK微信分享的接口调用 xff0c 由于最近工作需要 xff0c 研究了一下 xff0c 目前只是实现了部分接口的调用 xff1b 其他接口调用也是类似的 xff1b 在开发之前 xff0c 需要提前准备一个微信公众
  • Linux文件查找find

    1 find查找概述 为什么要有文件查找 xff0c 因为很多时候我们可能会忘了某个文件所在的位置 xff0c 此时就需要通过find来查找 find命令可以根据不同的条件来进行查找文件 xff0c 例如 xff1a 文件名称 文件大小 文
  • Linux文件打包与压缩

    1 文件打包与压缩 1 什么是文件压缩 将多个文件或目录合并成为一个特殊的文件 比如 搬家 脑补画面 img 2 为什么要对文件进行压缩 xff1f 当我们在传输大量的文件时 xff0c 通常都会选择将该文件进行压缩 xff0c 然后在进行
  • 集中式版本管理SVN与分布式版本管理Git的区别

    集中式版本控制系统SVN CVS 先说集中式版本控制系统 xff0c 版本库是集中存放在中央服务器的 xff0c 而大家工作的时候 xff0c 用的都是自己的电脑 xff0c 所以要先从中央服务器取得最新的版本 xff0c 然后开始工作 x
  • chatgpt Linux 定时任务 清理rancher pod启动服务的日志文件 脚本

    Linux 定时任务执行命令 假设我们想要每隔X分钟 每隔X天 每天X点执行一个脚本文件 xff0c 可以使用 Linux 自带的 cron 工具来创建定时任务 清理步骤 您可以使用 Linux 自带的 cron 工具来创建定时任务 xff
  • Http协议的几种常见状态码

    在开发好了网站后 xff0c 用户通过URL对资源进行操作 xff0c 服务器端要告诉用户交互的结果 xff0c 比如新增资源是成功还是失败了 一个较好的办法就是遵循HTTP协议 xff0c 使用请求响应的HTTP状态码 xff08 Sta
  • 推荐画UML图以及流程图的在线网站Site

    记得当年学UML课程的时候 xff0c 当你还在为了安装Rose而发愁的时候 xff0c 人家都把作业给交了 xff0c 并且现在大多数UML课程都会让学生使用Rational Rose做画图练习 近来 xff0c 做毕业设计需要提供各种流
  • 浙大PTA平台上的题目题解

    记载一些题目的代码 xff0c 之后想要在b站讲题目 xff0c 到时候会把录的视频上传b站 不是大佬 xff0c 是蒟蒻 xff0c 大佬勿喷 xff0c 仅供参考 xff0c 欢迎大家star xff0c qwq 浙大版 C语言程序设计
  • git 入门教程

    想要将一个项目托管到github xff0c 需要进入项目所在文件夹进行git init命令初始化 Git提交代码的基本流程 xff1a 创建或修改 本地文件使用 git add 命令 xff0c 将创建或修改的文件添加到本地的暂存区 xf
  • 博客搬家

    谢谢大家对我的blog的支持 现在本科毕业 xff0c 准备读研 方向大概是机器学习这一块 又是一个新的开始 我想将我读研学习Python以及机器学习 深度学习 以及数据分析处理 大数据等学习教程放在新的blog上 xff1a blog 欢
  • Python多线程笔记(Python_MultiThread)

    4 MultiThreading 多线程 使用 xff1a a 什么是多线程 xff1f 简单明了 xff0c 让计算机在同一时间内同时运行多个程序 xff0c 并且每个程序的计算互不干扰 xff0c 我们称这样的操作为多线程运算 b ad
  • Python多进程笔记(Python_MultiProcess)

    1 MutiProcessing 多进程 使用 xff1a a 什么是多进程 xff1f 在上面我们使用多线程去分别处理不同的事情 xff0c 看起来 xff0c 多线程处理并不比单线程循环处理的效率看起来那么的高 多进程是在利用我们电脑C
  • Python自带的GUI(Tkinter)教程

    1 Python Tkinter xff08 GUI图形界面 xff09 xff1a a What s Tkinter Tkinter 是什么 xff1f Tkinter是Python自带的一个GUI库 xff0c 他可以将我们在comma
  • Python科学计算包NumPy教程

    在我的Github上有一份代码与教程结合的jupyter Notebook文件 xff0c 大家可以clone下来看一看 下面会用实例的方式给出一些examples xff1a Tutorial教程 官方中文文档 span class to
  • 区块链入门的几个概念

    区块链入门的几个简单概念 1 What s Block Chain 区块链是一门软件技术 xff0c 从本质上来看就像是一个分布式的DataBase xff0c 是一个去中心化 xff0c 分布式技术 由于是分布式的 xff0c 所以区块链
  • Mysql GROUP_CONCAT与CONCAT_WS配合使用单选、多选拼接

    举例1 可以使用IF函数将单选和多选的值分别拼接 xff0c 并在最后的结果中使用CONCAT WS函数将它们合并 xff1a idcolors11223344 551 2 362 3 4 5 我们想要的结果为1 2 3 4 5 下面开始测