I fairly new to MYSQL and I'm having trouble getting dense rank to work correctly, I was hoping someone would be able to help adjust my query to get the desired results. Issue I'm having is after a ranking that is the same it goes to the next number instead of skipping a number. I have shown both current results and desired results below.
SELECT gameid,
score
, IF(score <> @pscore,@i:=@i+1,@i:=@i) rank
, @pscore := score
FROM playerstats x
, (SELECT @i:=0,@prev:='',@pscore:='') vars
ORDER
BY score DESC;
Current Results:
Desired Results:
Basically you need to sort the tdata before you rank it. MySQL
CREATE TABLE playerstats ( `Score` INTEGER, `Player` VARCHAR(11) ); INSERT INTO playerstats (`Score`, `Player`) VALUES ('2543', 'jkoffa'), ('2204', 'probins'), ('2010', 'rwatson'), ('2010', 'nbk'), ('2010', 'tthamos'), ('1950', 'en,acdonald'), ('1927', 'dmaginis');
SELECT `Player` ,IF(@score <> `Score` , @rn := @rn + @cor +1, @rn:= @rn) rnknumber ,IF(@score = `Score` , IF(@cor > 0,@cor := @cor +1,@cor := 1), @cor := 0) correction ,@score := `Score` 'Score' FROM (SELECT `Score`, `Player` FROM playerstats ORDER BY Score DESC) t1 , (SELECT @score := -1) t2 ,(SELECT @rn := 0) t3,(SELECT @cor := 0) t4
Player | rnknumber | correction | Score :---------- | :-------- | ---------: | ----: jkoffa | 1 | 0 | 2543 probins | 2 | 0 | 2204 rwatson | 3 | 0 | 2010 nbk | 3 | 1 | 2010 tthamos | 3 | 2 | 2010 en,acdonald | 6 | 0 | 1950 dmaginis | 7 | 0 | 1927
db<>fiddle here
for Mariadb 10.3
CREATE TABLE playerstats ( `Score` INTEGER, `Player` VARCHAR(11) ); INSERT INTO playerstats (`Score`, `Player`) VALUES ('2010', 'tthamos'), ('1950', 'acdonald'), ('1927', 'dmaginis'), ('2010', 'nbk'), ('2543', 'jkoffa'), ('2204', 'probins'), ('2010', 'rwatson');
SELECT `Player` ,IF(@score <> `Score` , @rn := @rn + @cor +1, @rn:= @rn ) rnknumber ,IF(@score = `Score` , IF(@cor > 0,@cor := @cor +1,@cor := 1), @cor := 0) correction ,@score := `Score` 'Score' FROM (SELECT `Score`, `Player` FROM playerstats ORDER BY Score DESC LIMIT 18446744073709551615) t1 , (SELECT @score := -1) t2 ,(SELECT @rn := 0) t3,(SELECT @cor := 0) t4
Player | rnknumber | correction | Score :------- | :-------- | ---------: | ----: jkoffa | 1 | 0 | 2543 probins | 2 | 0 | 2204 tthamos | 3 | 0 | 2010 nbk | 3 | 1 | 2010 rwatson | 3 | 2 | 2010 acdonald | 6 | 0 | 1950 dmaginis | 7 | 0 | 1927
db<>fiddle here