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.