对 oracle 表列中分隔列的内容求和

Posted

技术标签:

【中文标题】对 oracle 表列中分隔列的内容求和【英文标题】:sum the contents of a delimted column in an oracle table column 【发布时间】:2021-01-12 15:52:51 【问题描述】:

我在 oracle 数据库表中有一个以逗号分隔的数量的列。我需要对逗号分隔的数字求和并显示。

存储过程可能是一种选择。经过大量谷歌搜索后,我也找到了以下解决方案,例如 COL1、COL2、COL3、AMOUNT。这里 AMOUNT 用逗号分隔,如下所示,

123423,23523,5454,242342

经过大量搜索找到解决方案,

select 
  a.COL1 as COL1,
  a.COL2 as COL2,
  a.COL2 as COL3,
  sum(REGEXP_SUBSTR(a.AMOUNT, '\d+', 1, occ)) as SUM
from 
  TBL1 a,
  (select level occ from DUAL connect by level < 3000) 
 group by a.COL1, a.COL2, a.COL3;

但这里的问题是,这是一张巨大的桌子,而且由于分组,需要很长时间。由于我们是在单行的单个列值中汇总数据,而不是与其他行聚合,是否有一种执行方式可以做到这一点?

【问题讨论】:

永远不要将数据存储为逗号分隔的项目。只会给你带来很多麻烦。 你的问题实际上是有没有一种执行方式可以做到这一点?如果是的话..请参阅jarlh的评论:) 我无法修改表格或数据的存储方式。这就是问题 【参考方案1】:

这个表的糟糕设计已经给你带来了问题,但这个解决方案可能会奏效:

SELECT 
  a.COL1 as COL1,
  a.COL2 as COL2,
  a.COL2 as COL3,
  (
      SELECT SUM(trim(regexp_substr(amount, '[^,]+', 1, LEVEL)))
      FROM dual
      CONNECT BY regexp_substr(amount , '[^,]+', 1, LEVEL) IS NOT NULL
  ) as AMOUNT
FROM tbl1 a;

【讨论】:

以上是关于对 oracle 表列中分隔列的内容求和的主要内容,如果未能解决你的问题,请参考以下文章

使用子查询对列的值求和

oracle 行求和

Oracle Query 按另一个表中的每个日期范围对一列求和

oracle中列中的数据求和

oracle求和问题,不要分组条件,只要求和

复合求和:我想创建一个复合查询,它从两个不同的表中获取两列的单独总和,然后对它们求和