mysql - 在列表中添加值,该列表是配置单元中的字符串列
问题描述
我有一组数据,其中列由字符串数据类型的列表组成。
Column_A|Column_B
AAA |1 23 56 89 74 52
BBB |63 99 44 2 80 87 58 63
CCC |96 45 23 84 62 74
在这里,在上面的数据中,我需要在 B 列中添加如下值:
Column_A|Column_B |Column_C
AAA |1 23 56 89 74 52 |295
BBB |63 99 44 2 80 87 58 63|496
CCC |96 45 23 84 62 74 |384
我使用了 cast 函数,并使用以下查询将数据类型从 string 转换为 int。
select Column_A,cast (Column_B as INT) as Column_B from Xyz
但是对这些值求和是一个巨大的挑战。有人可以帮我吗?
我也在学习正则表达式。有没有可能使用正则表达式?
解决方案
Explode
您的列split
按空间和聚合使用。
这是 Hive 中的演示:
with your_data as
(
select Column_A,Column_B from
(
select stack(3,
'AAA','1 23 56 89 74 52',
'BBB','63 99 44 2 80 87 58 63',
'CCC','96 45 23 84 62 74'
) as (Column_A,Column_B)
)s
) --Use your table instead of this CTE
select Column_A,Column_B, sum(cast(b.val_b as int)) as Column_C
from your_data a
lateral view outer explode(split(Column_B,' ')) b as val_b
group by Column_A,Column_B;
结果:
OK
AAA 1 23 56 89 74 52 295
BBB 63 99 44 2 80 87 58 63 496
CCC 96 45 23 84 62 74 384
Time taken: 53.228 seconds, Fetched: 3 row(s)
或者,如果列表中元素的最大数量是固定的,你可以在不爆炸的情况下做同样的事情,它会工作得更快:
create temporary macro cast_value(s string) nvl(cast(s as int),0);
with your_data as
(
select Column_A,Column_B from
(
select stack(3,
'AAA','1 23 56 89 74 52',
'BBB','63 99 44 2 80 87 58 63',
'CCC','96 45 23 84 62 74'
) as (Column_A,Column_B)
)s
) --Use your table instead of this CTE
select Column_A,Column_B,
cast_value(col_B_array[0])+
cast_value(col_B_array[1])+
cast_value(col_B_array[2])+
cast_value(col_B_array[3])+
cast_value(col_B_array[4])+
cast_value(col_B_array[5])+
cast_value(col_B_array[6])+
cast_value(col_B_array[7])+
cast_value(col_B_array[8])+
cast_value(col_B_array[9]) as Column_C
from(
select Column_A,Column_B, split(Column_B,' ') col_B_array
from your_data a
)s
结果:
OK
AAA 1 23 56 89 74 52 295
BBB 63 99 44 2 80 87 58 63 496
CCC 96 45 23 84 62 74 384
Time taken: 0.82 seconds, Fetched: 3 row(s)
推荐阅读
- angular - Workbox 后台同步在线时向服务器发送 2 个请求而不是 1 个
- flutter - 动态和有条件地将小部件添加到列表中
- python - matplotlib 等高线图中的条件函数变化
- javascript - 如果一个精灵完全在视图之外,它还会被渲染吗?
- pyspark - 使用 PySpark 而不使用窗口对来自 Kafka 的流数据执行滚动平均
- performance - Perl,如何让这个脚本更小、更快、更好、更强?
- java - 如何在新的独立泛型类中重用另一个文件中的代码?
- c# - Microsoft Forms 停靠在左上角。C#
- python - Selenium:如何从“find_elements”列表中单击单个项目
- react-native - 反应原生buttons.slice不是一个函数