mysql - 将列拆分为多列mysql
问题描述
我的数据框有一列(numbers_selected),对于每一行,它看起来像这样:
1. 6-9-27
2. 2-3-6-8-30
3. 3-11-13-18
4. 3-14-15-17-18-30
5. 3-8-10-12-16
6. 3-7-8-27-29
7. 8-14-21
如您所见,每一行可以有不同数量的数字。
我正在寻找的是看看是否可以为这些数字中的每一个创建一个列。最多有 6 列,因为一行中的数字不能超过 6 个。
最后,数据集应如下所示:
第一个号码 | 第二个号码 | 第三个数字 | 第四号 | 第 5 号 | 第六号 |
---|---|---|---|---|---|
6 | 9 | 27 | 无效的 | 无效的 | 无效的 |
2 | 3 | 6 | 8 | 30 | 无效的 |
3 | 11 | 13 | 18 | 无效的 | 无效的 |
3 | 14 | 15 | 17 | 18 | 30 |
3 | 8 | 10 | 12 | 16 | 无效的 |
3 | 7 | 8 | 27 | 29 | 无效的 |
8 | 14 | 21 | 无效的 | 无效的 | 无效的 |
酒吧
我正在使用的查询是:
选择周,从 x 中选择 number_。
希望您能帮我解决这些问题,谢谢!
解决方案
json方法怎么样?
select week,
js ->> '$[0]' as num1,
js ->> '$[1]' as num2,
js ->> '$[2]' as num3,
js ->> '$[3]' as num4,
js ->> '$[4]' as num5,
js ->> '$[5]' as num6
from (
select t.*, concat('[', replace(numbers_selected, '-', ','), ']') as js
from mytable t
) t
这通过使用字符串函数将破折号分隔的字符串转换为看起来像 json 数组的东西来工作。通常,'6-9-27'
变为[6,9,27]
。然后我们可以使用 json 访问->>
器通过索引来获取每个数组元素。
周 | 数字1 | 数字2 | 数字3 | 数字4 | 数字5 | 数字6 ---: | :--- | :--- | :--- | :--- | :--- | :--- 1 | 6 | 9 | 27 | 空| 空| 空 2 | 2 | 3 | 6 | 8 | 30 | 空 3 | 3 | 11 | 13 | 18 | 空| 无效的 4 | 3 | 14 | 15 | 17 | 18 | 30 5 | 3 | 8 | 10 | 12 | 16 | 空 6 | 3 | 7 | 8 | 27 | 29 | 空 7 | 8 | 14 | 21 | 空| 空| 无效的
推荐阅读
- java - 从 if 语句的第一部分返回后的 else
- python - 在python中停止子进程
- javascript - 将隐藏 ID 附加到动态创建的 DIV
- c++ - 旅行推销员分而治之 C++
- node.js - TypeError:无法读取未定义的属性“RichEmbed”
- python - 我无法使用 Python 将名称中包含空格的文件上传到 Google Cloud Storage。我究竟做错了什么?
- python - 如何使用 python 编写指向 CSV 文件的超链接?
- python - CNN 培训时间过长(小时)
- flutter - 将 curl 获取请求转换为 dart 请求
- angular - 检查联系电话和电子邮件是否是假的?