If you've deleted all the rows from the table, you may as well do a complete refresh. But otherwise you can refresh it as normal:
create table t (w, x, y, z, primary key (w, x)) as
select rownum, rownum, rownum, mod(rownum, 10) from dual
connect by level <= 300;
create materialized view log on t with
primary key, rowid, sequence (z, y) including new values ;
create materialized view mv
refresh fast
as
select z, count(*), sum(y)
from t
group by z;
select * from mv
order by 1;
Z COUNT(*) SUM(Y)
0 30 4,650
1 30 4,380
2 30 4,410
3 30 4,440
4 30 4,470
5 30 4,500
6 30 4,530
7 30 4,560
8 30 4,590
9 30 4,620
delete t;
alter table t drop primary key;
alter table t add primary key (w);
exec dbms_mview.refresh('MV', 'C');
select * from mv
order by 1;
no rows selected
insert into t
select rownum, rownum, rownum, mod(rownum, 10) from dual
connect by level <= 300;
commit;
exec dbms_mview.refresh('MV', 'F');
select * from mv
order by 1;
Z COUNT(*) SUM(Y)
0 30 4,650
1 30 4,380
2 30 4,410
3 30 4,440
4 30 4,470
5 30 4,500
6 30 4,530
7 30 4,560
8 30 4,590
9 30 4,620