并排名次跳过有bug
并排名次跳过

如果出现并列排名,下一个名次将自动跳过

因mysql版本不支持rank排名,只能使用用户变量实现

sql是这样的:

CREATE TABLE `s_score`  (

  `id` int NOT NULL AUTO_INCREMENT,

  `score` int NOT NULL DEFAULT 0,

  `name` varchar(20) CHARACTER SET utf8mb4 NULL,

  PRIMARY KEY (`id`)

);

INSERT INTO `s_score` (`name`, `score`) VALUES

('张三', 80),

('小明', 90),

('小红', 60),

('李四', 70),

('赵武', 80),

('梁晨', 87),

('小绿', 69),

('威廉', 69),

('大卫', 91),

('王五', 96),

('赵六', 96),

('小五', 80),

('小龙', 88);

运行下面这段,你会发现rank这列一开始是1,2,3,4,5.。。排名的,再运行一遍就会变成并列名次,这是什么原因,有大佬解答下吗,应该如何调整

SELECT name ,score,@rank :=IF( @temp_score = score, @rank, @rank_incr ) `rank`,@rank_incr := @rank_incr + 1,

  @temp_score := score FROM s_score s,(SELECT @rank := 0,@temp_rank := NULL,@rank_incr := 1 ) q ORDER BY score DESC

FineReport 冰雨咖啡 发布于 2021-8-9 09:28
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
zsh331Lv8专家互助
发布于2022-2-11 17:20

MySQL升级到8+版本,「开窗函数」一键解决君之烦恼;

————————————

最佳回答
0
linbodingLv6中级互助
发布于2021-8-9 09:29

可以用公式   https://help.fanruan.com/finereport/doc-view-2504.html

  • 3关注人数
  • 403浏览人数
  • 最后回答于:2022-2-11 17:20
    请选择关闭问题的原因
    确定 取消
    返回顶部