Tôi đang đối mặt với một vấn đề rất phổ biến về "Chọn hàng đầu N cho mỗi nhóm trong một bảng".chọn N hàng đầu cho mỗi nhóm trong một bảng
Xem xét bảng có các cột id, name, hair_colour, score
.
Tôi muốn kết quả như vậy, với mỗi màu tóc, hãy cho tôi 3 tên người ghi bàn hàng đầu.
Để giải quyết việc này tôi đã nhận một cách chính xác những gì tôi cần trên Rick Osborne's blogpost "sql-getting-top-n-rows-for-a-grouped-query"
Đó giải pháp không hoạt động như mong đợi khi điểm số của tôi đều bình đẳng.
Trong ví dụ trên, kết quả như sau.
id name hair score ranknum
---------------------------------
12 Kit Blonde 10 1
9 Becca Blonde 9 2
8 Katie Blonde 8 3
3 Sarah Brunette 10 1
4 Deborah Brunette 9 2 - ------- - - > if
1 Kim Brunette 8 3
Xem xét hàng 4 Deborah Brunette 9 2
. Nếu điều này cũng có cùng số điểm (10) giống như Sarah, thì ranknum sẽ là 2,2,3 cho kiểu tóc "Brunette".
Giải pháp cho điều này là gì?
Bạn đang sử dụng RDBMS nào? –
Có một giải pháp cho việc này tại http://stackoverflow.com/questions/3823939/ trong trường hợp bạn không sử dụng các Máy chủ SQL mới hơn. –