Use uma função de janela:
select role, name,
row_number() over (partition by role order by name) as rn
from the_table
order by name;
select role, name,
row_number() over (partition by role order by name) as rn
from the_table
order by name;