это может сработать, но, возможно, есть лучший способ, о котором я не могу думать сейчас
set @i = 0;
select
f.id,
@i:=@i+1 as i,
case
when c.counter <= 1 then f.name
else concat(f.name,'-',(@i % c.counter) +1)
end as name
from
foo f
join (select id, count(*) as counter from foo group by id) c on c.id = f.id
order by
f.id,name;
РЕДАКТИРОВАТЬ: как указано в комментариях выше, лучше сделать это на уровне приложения по сравнению с db