Tôi nghĩ bạn cần liệt kê các giá trị và các biến là cách đơn giản nhất. Sau đó, một phép nối bổ sung cung cấp cho bạn thông tin bạn cần để sắp xếp theo các tên thường gặp nhất trong bảng:
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;