2010-10-20 7 views
0

Si j'ai une table de valeurs aléatoires dans une table sql, comment puis-je les exporter et les afficher sous la forme d'un râtelage plutôt que de la valeur absolue ... par exemple .. si les trois valeurs sont 30 85 et 90 comment puis-je 30 faire affichage 1 ou 1er, 85 comme 2 ou 2 etcSortie SQL en tant que classement

+0

duplication possible de [Quelle est la meilleure façon de générer des rangs dans MYSQL?] (Http://stackoverflow.com/questions/431053/what-is-the-best-way-to-generate-ranks-in- mysql) – JohnFx

Répondre

2

MySQL ne prend pas en charge la fonction analytique (ROW_NUMBER, GRADE, DENSE_RANK), qui est généralement ce que vous utiliseriez pour des exigences comme celles-ci.

Utilisation:

SELECT @rownum := @rownum + 1 AS ranking 
    FROM YOUR_TABLE t 
    JOIN (SELECT @rownum := 0) r 
ORDER BY t.value 

Exemple:

SELECT x.num, 
     @rownum := @rownum + 1 AS ranking 
    FROM (SELECT 30 AS num 
      UNION ALL 
      SELECT 85 
      UNION ALL 
      SELECT 90) x 
    JOIN (SELECT @rownum := 0) r 
ORDER BY x.num 

Vous pouvez utiliser:

SELECT (SELECT COUNT(*) 
      FROM YOUR_TABLE b 
     WHERE b.value <= a.value) AS ranking 
    FROM YOUR_TABLE a 

... mais les doublons auraient la même valeur de classement. Et vous devez vous assurer que la comparaison des valeurs est dans la bonne direction.

1

Essayez:

set @i = 0; 
select myValue, 
     @i:[email protected]+1 as Ranking 
from myTable 
order by myValue ASC 
+0

Vous voulez probablement un 'ORDER BY myValue ASC' là. –

+0

@Byron @JohnFx: en effet, merci! –

Questions connexes