web-dev-qa-db-fra.com

sélectionner le compteur d'incréments dans mysql

Voici ma requête mysql

select name from table;

Je souhaite sélectionner un compteur d'incrémentation le long du nom du côté. donc la sortie attendue sera

Jay 1
roy 2
ravi 3
ram 4
33
iJade
select name,
      @rownum := @rownum + 1 as row_number
from your_table
cross join (select @rownum := 0) r
order by name

Cette partie:

cross join (select @rownum := 0) r

permet d'introduire une variable sans avoir besoin d'une requête séparée. Ainsi, la première requête pourrait également être décomposée en deux requêtes comme celle-ci:

set @rownum := 0;

select name,
      @rownum := @rownum + 1 as row_number
from your_table
order by name;

par exemple lorsqu'il est utilisé dans une procédure stockée.

95
juergen d

Dans MySQL 8 et supérieur, vous pouvez également utiliser la fonction ROW_NUMBER() Fenêtre .

SELECT
    name,
    ROW_NUMBER() OVER ()
FROM table

Résultat:

Jay  1
roy  2
ravi 3
ram  4

Comme le montre juergen d, ce serait une bonne idée de mettre un ORDER BY pour avoir une requête déterministe.

Le ORDER BY peut s'appliquer indépendamment à la requête et au compteur. Alors:

SELECT
    name,
    ROW_NUMBER() OVER (ORDER BY name DESC)
FROM table
ORDER BY name

vous donnerait un compteur par ordre décroissant.

Résultat:

Jay  4
ram  3
ravi 2
roy  1
3
user11415449