我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL分割一行为多行的思路

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL分割一行为多行的思路

MySQL分割一行为多行的思路

最近数据分析有需求,分析运营活动短信用户,但是发送短信的用户是通过 JSON 字符串数组存储在一个 text 字段的。内容类似于:

["user1", "user2", "user3"....]

数据分析想分析这些用户,那么就需要 in 这些用户查询。自己手动拼 SQL 太蛋疼,而且好几万几十万的用户,拼成SQL,复制粘贴也够蛋疼的。那么可以考虑将这一行分割为多行,作为一个字段。

mysql.help_topic 是啥

网上的思路是利用 mysql.help_topic 这个记录表,这个表是存储 mysql 各种帮助文档目录的,主要因为他有一个从零开始自增的 id 字段,所以采用这张表作为帮助表。其实他不是用来干这个的。并且,有时候我们精简安装,或者是云服务里面的 mysql,他们的这张表里面的内容,是空的,所以我们不能靠这张表。

如何自己实现呢?

思路主要是如下,首先处理数据,将 JSON 字符串数组处理成:

user1,user2,user3

通过:

select replace(replace(replace(replace(a,"[",""),"]",""), """, "")," ","") processed_data from 表

然后,我们通过substring_index函数,可以提取出user1user2user3这些用户 id。分别是:substring_index(substring_index(processed_data,",",1),",",-1)substring_index(substring_index(processed_data,",",2),",",-1)substring_index(substring_index(processed_data,",",3),",",-1).可以看出,如果我们能提供一个数字,这个数字从1开始,一直到,的个数 + 1,这样就能使用substring_index函数,将每个 userId 提取出来,也就是将数据转换成:

+-------------------+----+
| processed_data    | id |
| user1,user2,user3 | 1  |
| user1,user2,user3 | 2  |
| user1,user2,user3 | 3  |

哪里有这么一张表呢?我们可以创建一个表,里面只有一列 id,从0或者1开始,这里我们从0开始,一直到你的,可能的最多个数,我们这里是 200 万。

+----+
| id |
+----+
|  0 |
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |

这样,通过 join 这张表,用 id < ,的个数为条件,就能得出上面的processed_dataid join 的数据。

最后的SQL:

SELECT
	substring_index( substring_index( processed_data, ",", b.id + 1 ), ",",- 1 ) user_id 
FROM
(
SELECT REPLACE
	(
		REPLACE ( REPLACE ( REPLACE (数据字段, "[", "" ), "]", "" ), """, "" ),
		" ",
		"" 
	) processed_data 
FROM
	表 
) temp
JOIN help表 b ON b.id < ( length( temp.processed_data ) - length( REPLACE ( temp.processed_data, ",", "" ) ) + 1 )

其中的 help 表就是里面只有一列 id,从0或者1开始,这里我们从0开始,一直到你的,可能的最多个数的这张表

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL分割一行为多行的思路

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL分割一行为多行的思路

最近数据分析有需求,分析运营活动短信用户,但是发送短信的用户是通过 JSON 字符串数组存储在一个 text 字段的。内容类似于:["user1", "user2", "user3"....]数据分析想分析这些用户,那么就需要 in 这些用户查询。自己手动拼
MySQL分割一行为多行的思路
2020-08-14

【SQL】按特定字符分割一行转多行

原表如下: with t1 as( select 1 as id, "a,b" as course union select 2 as id, "a,b,c" as course union select 3
2023-08-19

mysql中如何将存在分隔符号的一列进行拆分,成为多行

mysql中如何将存在分隔符号的一列进行拆分,成为多行 -- ****************************** 写在前面的说明 **********************************/* student 为 上面左
2023-08-17

mysql如何将一个列按逗号分割为多列

目录mysql将一个列按逗号分割为多列假设有一个表my_table下面的例子请注意总结mysql将一个列按逗号分割为多列在MySQL中,将一个列按逗号分割为多列通常需要使用字符串函数,如SUBSTRING_INDEX(),配合UNION
mysql如何将一个列按逗号分割为多列
2024-09-20

sql中多行值变为一行的函数

sql 中将多行值转换为一行的函数为 array_to_string(),它将一个数组转换为一个以逗号分隔的字符串。通过与 group_concat() 等聚合函数结合使用,可以将来自多行的数据分组并转换为一行。SQL 中将多行值转换为一行
sql中多行值变为一行的函数
2024-05-02

MySQL将多行数据转换为一行数据的实现示例

目录摘要:正文:基本语法示例注意GROUP_CONCAT基本语法示例示例 1: 基本的 GROUP_CONCAT 使用示例 2: 使用 ORDER BY示例 3: 使用 SEPARATOR注意事项摘要:在mysql中,如果你想要将某个属性
MySQL将多行数据转换为一行数据的实现示例
2024-09-09

Pandas怎么将一列中的文本拆分为多行

这篇文章将为大家详细讲解有关Pandas怎么将一列中的文本拆分为多行,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 在数据处理过程中,经常会遇到以下类型的数据:在同一列中,本该分别填入多行中的数据,被填
2023-06-04

Vue3中的执行流程思路分析-流程图

这篇文章主要介绍了Vue3中的执行流程思路分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-12-03

编程热搜

目录