sql - (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
解决方案
您可以使用相关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<>在这里摆弄
推荐阅读
- javascript - 将 iFrame Resizer 与 React JS 页面用作内容
- java - GC 如何在 GC 循环期间停止清理新创建的内存/对象(Java/C#)
- java - 在 Spring Boot 应用程序中使用 @Valid 和 BindingResult 时的表单输入验证问题
- oracle - 除数等于零,需要案例陈述的指导
- npm - 'npm cache clean' 清理了什么?
- python - Pandas 忽略作为参数传递的分隔符
- deezer - Deezer api 选项流式传输持续时间
- react-native - 有没有办法可以使用 Expo React Native 从图像中检测文本?
- r - 使用正确的 purrr::map 函数组合从多级列表创建 df
- c# - 当前不支持“System.String.Split”方法的这种重载