Bạn đã hỏi điều gì dường như như một câu hỏi hợp lý. Có nhiều cách hoạt động khác nhau trong SQL và đôi khi một số phương pháp tốt hơn những phương pháp khác. Vấn đề xếp hạng chỉ là một trong rất nhiều ví dụ. "Câu trả lời" cho câu hỏi của bạn nói chung là order by
sẽ hoạt động tốt hơn nhóm group by
trong MySQL. Mặc dù điều đó còn phụ thuộc vào dữ liệu cụ thể và những gì bạn cho là "tốt hơn".
Các vấn đề cụ thể với câu hỏi là bạn có ba truy vấn khác nhau trả về ba thứ khác nhau.
Đầu tiên trả về tất cả các nhân viên có "cấp bậc dày đặc" giống nhau. Thuật ngữ đó được sử dụng có chủ đích vì nó tương ứng với ANSI dense_rank()
chức năng mà MySQL không hỗ trợ. Vì vậy, nếu mức lương của bạn là 100, 100 và 10, nó sẽ trả về hai hàng có xếp hạng là 1 và một có xếp hạng là 2.
Kết quả thứ hai trả về các kết quả khác nhau nếu có ràng buộc. Nếu mức lương là 100, 100, 10, phiên bản này sẽ không trả về hàng nào có xếp hạng là 1, hai hàng có xếp hạng là 2 và một hàng có xếp hạng là 3.
Kết quả thứ ba trả về một tập hợp kết quả hoàn toàn khác, chỉ là tiền lương và thứ hạng của mức lương.
Nhận xét của tôi hướng đến việc thử các truy vấn trên dữ liệu của bạn. Trên thực tế, bạn nên quyết định những gì bạn thực sự muốn, cả từ góc độ chức năng và hiệu suất.