Compte tenu d'une table de scores avec le schéma suivant
Line 3: SyntaxError: near 'SET @rank_count = 0;
SELECT Id, Score, CASE
WHEN @prev_value := Score THEN @'
3 Réponses :
dans mysql 8.x, vous pouvez utiliser la fonction dense_rank () code>, comme dans:
Vous pouvez compter tous les scores distincts forts> supérieurs à ceux de chaque ligne et ajouter 1 au résultat: Voir le Demo P> P>
Vous pouvez utiliser des variables. Je pense que vous avez juste besoin d'une seule requête:
SELECT Id, Score,
(CASE WHEN @prev_value = Score THEN @rank_count
WHEN @prev_value := Score THEN @rank_count := @rank_count + 1
END) AS Rank
FROM (SELECT s.*
FROM Scores s
ORDER BY Score s
) s CROSS JOIN
(SELECT @prev_value := NULL, @rank_count := 0) params;
Rank Code> n'est pas un bon nom pour une colonne car, puisque mysql 8.0 c'est un Word réservé .Affectation, "
quand @prev_value: = Score, puis code>", VS Comparaison, "quand @prev_value = score alors code>". J'irais cependant avec l'une des suggestions des réponses.