2009-02-02 29 views
7

Tôi có một bảng users có cột được gọi là money_sent. Tôi muốn đặt hàng bảng này theo money_sent theo thứ tự giảm dần và sau đó tìm hiểu "xếp hạng" người dùng cụ thể có gì.MySQL: Nhận số hàng (xếp hạng) cho một hàng cụ thể

Ví dụ: chỉ 111 người đã chi tiêu nhiều tiền hơn Người dùng 12392, vì vậy họ sẽ xếp hạng 112.

Tôi có thể truy vấn điều này bằng cách nào?

Trả lời

13

Làm thế nào về:

SELECT count(*) FROM users WHERE money_sent < (
    SELECT money_sent FROM users WHERE user = 'joe' 
); 
+0

Tuyệt vời! Một ý tưởng đơn giản nhưng hiệu quả! –

2
SELECT Row,user, money_sent 
FROM (SELECT @row := @row + 1 AS Row, user, money_sent 
     FROM table1 order by money_sent desc) 
As derived1 
2

Nếu bạn cũng muốn nhận được hàng của người dùng cùng với cấp bậc của người dùng đó, bạn có thể sử dụng một cái gì đó như thế này:

SELECT u1.*, COUNT(u2.user) 
FROM users u1 
    LEFT OUTER JOIN users as u2 ON (u1.money_sent < u2.money_sent) 
GROUP BY u1.user; 
Các vấn đề liên quan