首页 > 解决方案 > (Oracle)拆分字符串然后一次平均

问题描述

我的列 COL1 有时有诸如“10|20”之类的数据。如果数据有“|”,我的目标是拆分数据。然后将它们平均得到 15。如何修改下面的代码以添加这样的 COL2?

(Expected results)

COL1      COL2
-------  -------
10        10
10|20     15
10|20|30  20

(My code)
WITH A AS (
SELECT '10' COL1 FROM DUAL
UNION ALL
SELECT '10|20' FROM DUAL
UNION ALL
SELECT '10|20|30' FROM DUAL
) SELECT COL1 FROM A  DUAL 

标签: sqloracleaverage

解决方案


您可以使用相关XMLTABLE来拆分值:

WITH A AS (
SELECT '10' COL1 FROM DUAL UNION ALL
SELECT '10|20' FROM DUAL UNION ALL
SELECT '10|20|30' FROM DUAL
)
SELECT col1,
       (
         SELECT AVG( TO_NUMBER( column_value ) )
         FROM   xmltable(('"' || REPLACE(a.col1, '|', '","') || '"'))
       ) AS col2
FROM   A

哪个输出:

COL1 | COL2
:------- | ---:
10 | 10
10|20 | 15
10|20|30 | 20

db<>在这里摆弄


推荐阅读