【问题标题】:Split column into multiple columns mysql将列拆分为多列mysql
【发布时间】:2021-03-25 14:51:47
【问题描述】:

我的数据框有一列 (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 个。

最后,数据集应如下所示:

1st Number 2nd Number 3rd Number 4th Number 5th Number 6th Number
6 9 27 Null Null Null
2 3 6 8 30 Null
3 11 13 18 Null Null
3 14 15 17 18 30
3 8 10 12 16 Null
3 7 8 27 29 Null
8 14 21 Null Null Null

酒吧

我使用的查询是:

选择周,从 x 中选择 number_。

希望您能帮我解决这些问题,谢谢!

【问题讨论】:

    标签: mysql sql arrays json csv


    【解决方案1】:

    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 访问器 ->> 来按索引获取每个数组元素。

    Demo on DB Fiddle

    周 |数字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 | | |

    【讨论】:

    • 以及直接在 MySQL 中进行的任何方式?我喜欢你的方法,但是表格有 50 万行,所以在创建表格时插入所有这些行会非常手动
    • @JVA:我不明白你的问题。这是一个纯 MySQL 查询。
    • @JVA 你的意思是你想实际添加新列并设置它们,而不是仅仅在查询中返回拆分数据?
    • pre-5.7,不使用 json:dbfiddle.uk/…
    • @JVA:你运行的是哪个版本的 MySQL? select version()可以告诉你。
    猜你喜欢
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 2021-01-24
    • 2013-07-12
    • 2013-01-23
    • 2022-01-03
    相关资源
    最近更新 更多