Jag tror att du måste räkna upp värdena, och variabler är det enklaste sättet. Sedan ger en extra anslutning dig den information du behöver för att beställa efter de vanligaste namnen i tabellen:
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;