Comments explained it; see if such a query helps.
SQL> set define off;
SQL> with
2 test (name, amount) as
3 -- sample data
4 (select 'mark, tom, & phil', 200 from dual union all
5 select 'mark' , 100 from dual union all
6 select 'phil' , 50 from dual
7 ),
8 temp as
9 -- split NAME to rows
10 (select regexp_substr(name, 'w+', 1, column_value) name, amount
11 from test cross join
12 table(cast(multiset(select level from dual
13 connect by level <= regexp_count(name, ',') + 1
14 ) as sys.odcinumberlist))
15 )
16 select name, sum(amount)
17 from temp
18 group by name;
NAME SUM(AMOUNT)
---------- -----------
tom 200
phil 250
mark 300
SQL>
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…