[英]MySQL dense_rank not skipping numbers
我对 MYSQL 相当陌生,我无法让密集等级正常工作,我希望有人能够帮助调整我的查询以获得所需的结果。 我遇到的问题是在排名相同之后它会转到下一个数字而不是跳过一个数字。 我在下面显示了当前结果和预期结果。
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;
当前结果:
期望的结果:
基本上,您需要先对 tdata 进行排序,然后再对其进行排名。 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
播放器 | 号码 | 修正 | 分数:--------- |:-------- | ---------: | ----: jkoffa | 1 | 0 | 2543 个探针 | 2 | 0 | 第2204章 3 | 0 | 2010 nbk | 3 | 1 | 2010 年 | 3 | 2 | 2010 年,阿克唐纳德 | 6 | 0 | 1950 年 7 | 0 | 1927年
db<> 在这里摆弄
对于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
播放器 | 号码 | 修正 | 分数:------- |:-------- | ---------: | ----: jkoffa | 1 | 0 | 2543 个探针 | 2 | 0 | 第2204章 3 | 0 | 2010 nbk | 3 | 1 | 2010 华生 | 3 | 2 | 2010 阿克唐纳 | 6 | 0 | 1950 年 7 | 0 | 1927年
db<> 在这里摆弄
nbk - 我为图片道歉,下次确保使用文字。 再次感谢您的宝贵时间。 不幸的是,它仅在以正确的顺序输入数据时才有效。 如果您要取最后三个条目并将它们放在第一位,那么 tthomos 将排名第一。
CREATE TABLE playerstats (
`Score` INTEGER,
`Player` VARCHAR(11)
);
INSERT INTO playerstats
(`Score`, `Player`)
VALUES
('2010', 'tthamos'),
('1950', 'acdonald'),
('1927', 'dmaginis'),
('2543', 'jkoffa'),
('2204', 'probins'),
('2010', 'rwatson');
然后跑:
SELECT
`Player`
,IF(@score <> `Score` , @rn := @rn + @cor +1, @rn:= @rn) rnknumber
,IF(@score = `Score` , @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
你会得到:
tthamos 1 0 2010
acdonal 2 0 1950
dmaginis 3 0 1927
jkoffa 4 0 2543
probins 5 0 2204
rwatshon 6 0 2010
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.