MySQL 针对逗号拼接的数据字段转行思路

一、MySQL 针对逗号拼接的数据字段转行思路

MySQL 中我们有可能为了方便操作,有时会将一个字段存储多个信息,使用英文逗号隔开,当然这种情况属于对数据库的设计上有些欠妥。但如果遇到了这种情况又需要对数据进行统计的情况就有点棘手了,例如有下面爱好表

CREATE TABLE `user_hobby` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`hobby` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

其中 hobby 字段用来存储用户的爱好,如果多个采用的逗号拼接的方式,其中表中有如下数据:

INSERT INTO `test`.`user_hobby` (`id`, `name`, `hobby`) VALUES (1, '小明', '打篮球,踢足球');
INSERT INTO `test`.`user_hobby` (`id`, `name`, `hobby`) VALUES (2, '小红', '打乒乓球,打篮球,跑步');
INSERT INTO `test`.`user_hobby` (`id`, `name`, `hobby`) VALUES (3, '张三', '打羽毛球,游泳');
INSERT INTO `test`.`user_hobby` (`id`, `name`, `hobby`) VALUES (4, '李四', '跑步');
INSERT INTO `test`.`user_hobby` (`id`, `name`, `hobby`) VALUES (5, '王五', '踢足球,游泳');

下面需要统计分析每个爱好有多少人。

思路:使用 SUBSTRING_INDEX 和 UNION ALL

首先我们可以借助 UNION ALL 生成固定行数的编号,然后利用 SUBSTRING_INDEX 去除固定编号的内容出来:

SELECT u.id, u.name, SUBSTRING_INDEX(SUBSTRING_INDEX(u.hobby, ',', t.n), ',', -1) as hobby
FROM user_hobby u
JOIN (SELECT 1 as n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5
) t
ON CHAR_LENGTH(u.hobby) - CHAR_LENGTH(REPLACE(u.hobby, ',', '')) >= t.n - 1
ORDER BY u.id, u.hobby;

在这里插入图片描述
下面就可以基于上述的结果进行分组统计了:

SELECT hobby,count(*) as total
FROM (
SELECT u.id, u.name, SUBSTRING_INDEX(SUBSTRING_INDEX(u.hobby, ',', t.n), ',', -1) as hobby
FROM user_hobby u
JOIN (SELECT 1 as n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5
) t
ON CHAR_LENGTH(u.hobby) - CHAR_LENGTH(REPLACE(u.hobby, ',', '')) >= t.n - 1
) f GROUP BY hobby
ORDER BY total DESC

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/729445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

golang常见面试题

1. go语言有哪些优点、特性? 语法简便,容易上手。 支持高并发,go有独特的协程概念,一般语言最小的执行单位是线程,go语言支持多开协程,协程是用户态线程,协程的占用内存更少,协程只…

STM32CubeIDE基础学习-设置输出HEX和BIN文件的方法

STM32CubeIDE基础学习-设置输出HEX和BIN文件的方法 前言 当某些时候,需要把一个程序下载到单片机里面进行功能验证或者看结果时,可以用串口软件来烧录程序,而不用再打开程序工程在线烧录程序这么麻烦了,那么就需要该工程文件夹下…

电脑记事本怎么查看字数 记事本字数便捷查看方法

在数字化的时代,电脑记事本已成为我记录生活、工作的得力助手。相较于传统的纸质笔记本,它的便捷性不言而喻:随时随地,打开就能写,无需担心纸张用尽或笔墨不干的尴尬。但有一个问题一直困扰着我,那就是如何…

UI学习 一

教程:Accessibility – Material Design 3 需要科学上网,否则图片显示不出来。设计教程没有图片说明,不容易理解。 优化UI方向 清晰可见的元素足够的对比度和尺寸重要性的明确等级一眼就能辨别的关键信息 传达某一事物的相对重要性 将重…

Centos7 安装mongoDB

下载安装包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.12.tgz 解压 tar -zxvf mongodb-linux-x86_64-3.2.12.tgz移动到指定位置 mv mongodb-linux-x86_64-3.2.12/ /usr/local/mongodb在/usr/local/mongodb下创建文件夹 cd /usr/local/mongodb m…

(二十二)从零开始搭建k8s集群——高可用kubernates集群搭建上篇

前言 本节内容分为上、中、下三篇,上篇主要是关于搭建k8s的基础环境,包括服务器基本环境的配置(网络、端口、主机名、防火墙、交换分区、文件句柄数等)、docker环境部署安装配置、镜像源配置等。中篇会介绍k8s的核心组件安装、k8…

xss.pwnfunction.com靶机 Warmups

通关要求弹出警告框alert(1337) 没有用户交互 不能使用外链接 在chrome中测试 Ma Spaghet! 通过分析代码我们可以看到它直接用innerHTML将接收的内容赋值 但是我们不能使用<script>标签因为&#xff1a;HTML 5 中指定不执行由 innerHTML 插入的 <script> 标签。 所…

网络原理初识

一、IP地址 概念 IP 地址主要用于标识网络主机、其他网络设备&#xff08;如路由器&#xff09;的网络地址。简单说&#xff0c; IP 地址用于定位主机 的网络地址 。 就像我们发送快递一样&#xff0c;需要知道对方的收货地址&#xff0c;快递员才能将包裹送到目的地。 二、…

YOLOv8原创改进:原创自研head创新 | 空间上下文感知模块(SCAM)结合超轻量高效动态上采样DySample | 小目标涨点系列

💡💡💡本文独家改进:YOLOV8 head创新,1)一种超轻量高效动态上采样DySample, 具有更少的参数、FLOPs,效果秒杀CAFFE和YOLOv8网络中的nn.Upsample;2)加入空间上下文感知模块(SCAM)进一步提升检测精度; 改进结构图如下: 💡💡💡在多个数据集下验证能够涨点…

使用Unreal Engine 5创建逼真人物化身(meta human)的教程

这是一个关于使用Unreal Engine 5创建逼真人物化身(meta human)的教程视频。作者们使用PolyCam应用程序对一位名叫Angelina的女性进行了3D人体扫描,然后在Blender中清理扫描数据,并将其导入Unreal Engine 5。接着他们利用MetaHuman Creator网站进行了进一步的定制,将Angelina的…

Java中SpringBoot四大核心组件是什么

一、Spring Boot Starter 1.1 Starter的应用示例 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency><groupId>org.mybatis.sprin…

Java开发从入门到精通(一):Dubbo

目录&#xff1a; 服务注册与发现机制 服务调用 线程派发机制 1、服务注册与发现机制 Dubbo的服务注册与发现机制如下图所示&#xff1a; Dubbo中存在4类角色&#xff1a; Registry 注册中心。 Consumer 服务调用者、消费端。 Provider 服务提供者。 Monitor 监控中心。 调用…

docker学习笔记——对数据卷的一些简单命令

高级数据卷 docker volume ls&#xff1a;查看docker所有维护的数据卷。 docker volume inspect 数据卷别名&#xff1a;查看数据卷的详细信息。 docker volume rm 数据卷的别名&#xff1a;删除数据卷。 docker volume create 数据卷别名&#xff1a;创建一个别名数据卷。

Android屏幕共享-硬编码硬解码

Android屏幕共享-硬编码硬解码 说起Android之间的屏幕共享&#xff0c;第一次接触会比较陌生&#xff0c;不过大家多少有了解过ffmpeg&#xff0c;看上去是不是很熟悉&#xff1f;ffmpeg是一套处理音视频的开源程序&#xff0c;但对于C了解较少的同学&#xff0c;编译起来很复杂…

笔试题7——在数组中找出三个数字和为0的全部组合, test ok

题目描述: 在数组中找出三个数字使得它们的和为0,找出所有的这种不包含重复的组合 思路: 首先将数组元素从小到大排序,设三个元素下标i,j,k,将i从头开始遍历,j初始化为i+1,k初始化为n-1; while(j < k) 当三元素之和小于0时,j++; 当三元素之和大于0时,k–; 当三…

二维码门楼牌管理系统应用场景:社会服务与福利的智能化革新

文章目录 前言一、二维码门楼牌管理系统的基本功能二、在社会服务领域的应用三、在福利保障领域的应用四、结论 前言 在数字化浪潮的推动下&#xff0c;二维码门楼牌管理系统以其便捷、高效的特点&#xff0c;正逐渐渗透到社会服务和福利的各个领域。这一系统不仅为市民提供了…

Claude3 目前最强大模型

过内试用连接 ChatAI (whjin.cn)http://chatyy.whjin.cn/?userid51913030&typebaidu&keywordid0&bd_vid12153741466503666331 Claude 3: A new generation of AI The Claude 3 family of models represents the cutting edge of AI technology, offering unpara…

RN开发搬砖经验之-如何处理FlashList组件加载后调用scrollToIndex没有滚动指定位置

前言 如题&#xff0c;这里只能说是处理&#xff0c;起正向作用的临时方案&#xff0c;因为我也着实没搞懂这个BUG的具体原因&#xff0c;看github上有提相关的issuesFor long lists with different item types scrollToIndex does not work reliable&#xff0c;但看官方没有…

Java的基本数据类型——四类八种

目录 前言 1.整型 1.1整型变量 1.2长整型变量 1.3短整型变量 1.4字节型变量 2.浮点型 2.1双精度浮点数 2.2单精度浮点数 3.字符型 4.布尔型 前言 java的数据类型分为基本数据类型与引用数据类型,其中除了整型、浮点型、字符型、布尔型&#xff0c;即为引用数据类型…

Extended Feature Pyramid Network for SmallObject Detection

摘要 各种尺度的特征耦合会削弱小对象的性能&#xff0c;本文中&#xff0c;我们提出了具有超高分辨率金字塔的扩展特征金字塔网络&#xff08;EFPN &#xff09;&#xff0c;专门用于小目标检测。具体来说&#xff0c;我们设计了一个新模块&#xff0c;称为特征纹理转移&#…