Je pense que vous devez énumérer les valeurs, et les variables sont le moyen le plus simple. Ensuite, une jointure supplémentaire vous donne les informations dont vous avez besoin pour trier par les noms les plus fréquents dans le tableau :
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;