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
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.
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