2009-02-02 7 views
7

J'ai une table users qui a une colonne appelée money_sent. Je veux commander cette table par money_sent dans l'ordre décroissant, et puis découvrir quel "rang" un utilisateur spécifique a.MySQL: Obtenir un numéro de ligne (classement) pour une ligne spécifique

Par exemple, seulement 111 personnes ont dépensé plus d'argent que l'utilisateur 12392, alors ils seraient rang 112.

Comment pourrais-je interroger cela?

Répondre

13

Que diriez-vous:

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

Great! Une idée simple mais efficace! –

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

Si vous voulez également obtenir la ligne avec le rang de l'utilisateur de l'utilisateur, vous pouvez utiliser quelque chose comme ceci:

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; 
Questions connexes