select
x.last_name,
x.name_count
from
(select
u.last_name,
count(*) as name_count,
rank() over (order by count(*) desc) as rank
from
users u
group by
u.last_name) x
where
x.rank = 1
Sử dụng chức năng phân tích rank
. Nó sẽ chỉ định một số dựa trên thứ tự của count(*) desc
. Nếu hai tên có cùng số lượng, chúng sẽ có cùng thứ hạng và số tiếp theo bị bỏ qua (vì vậy bạn có thể nhận được các hàng có xếp hạng 1, 1 và 3). dense_rank
là một giải pháp thay thế không bỏ qua số tiếp theo nếu hai hàng có cùng thứ hạng, (vì vậy bạn sẽ nhận được 1, 1, 2), nhưng nếu bạn chỉ muốn các hàng có xếp hạng 1, không có nhiều sự khác biệt .
Nếu bạn chỉ muốn một hàng, bạn muốn mỗi hàng có một số khác nhau. Trong trường hợp đó, hãy sử dụng row_number
. Ngoài sự khác biệt nhỏ nhưng quan trọng này, các chức năng này tương tự nhau và có thể được sử dụng theo cách giống nhau.