SELECT total.* FROM ( SELECT obj.uid, obj.score, CASE WHEN @rowtotal = obj.score THEN @rownum WHEN @rowtotal := obj.score THEN @rownum :=@rownum + 1 WHEN @rowtotal = 0 THEN @rownum :=@rownum + 1 END AS rownum FROM ( SELECT uid, score FROM t ORDER BY score DESC ) AS obj, ( SELECT @rownum := 0 ,@rowtotal := NULL ) r ) AS total WHERE total.uid = 222;