Ich denke, Sie müssen die Werte aufzählen, und Variablen sind der einfachste Weg. Dann gibt Ihnen ein zusätzlicher Join die Informationen, die Sie brauchen, um nach den häufigsten Namen in der Tabelle zu ordnen:
select t.*
from (select t.*,
(@rn := if(@n = name, @rn + 1,
if(@rn := name, 1, 1)
)
) as rn
from t cross join
(select @n := '', @rn := 0
order by name
) t join
(select name, count(*) as cnt
from t
group by name
) tn
on t.name = tn.name
where rn <= 4
order by cnt desc, name;