我有一张带有以下数据的表格
Sno Ns_NAME Mode stat 1 AF_rtf_Nd_1 Manual 2 2 AF_rtf_Nd_2 Manual 3 3 AF_rtf_Nd_2i Manual 2 4 AF_rtf_Nd_3 Auto 2 5 AF_rtf_Nd_3i Auto 3
我需要在下面执行,
检查它是否为手动,从Ns_NAME提取到最后一个“_”并检查重复项。在这种情况下,有1个重复。获得这两行的平均值[(2 + 3)/ 2]并泵入另一个表T2。
输出:
T2
AF_rtf_Nd Manual 2.5
我尝试使用substr函数并使用了etract。但它没有取得正确的结果。
答案 0 :(得分:0)
为了查看手册'仅记录,使用WHERE
子句。然后聚合子字符串。您将获得包含INSTR
加SUBSTR
或REGEX_REPLACE
的子字符串。然后,只使用HAVING COUNT(*) > 1
保留重复项。
insert into t2
select
min(sno),
regexp_replace(ns_name, '_[^_]*$', ''),
'Manual',
avg(stat)
from t1
where mode = 'Manual'
group by regexp_replace(ns_name, '_[^_]*$', '')
having count(*) > 1;
REGEXP_REPLACE
与[{1}}和INSTR
相当于
SUBSTR
(唯一的区别是字符串中根本没有' _')