MySQL分数排名问题“ERROR 1064 (42000)”解决方法

阅读: 评论:0

MySQL分数排名问题“ERROR 1064 (42000)”解决方法

MySQL分数排名问题“ERROR 1064 (42000)”解决方法

在做“分数排名”问题时,运行语句总是出现“ERROR 1064 (42000): You have an error in your SQL syntax;”。

原因是在语句中使用了rank,而rank是mysql 的保留字。
当使用mysql保留字的时候,需要使用反引号将其引起来(就是键盘第二排的第一个)

开始以为是自己的方法不对,但是报错是语法错误,但是一直找不出语法错误,就尝试其他解决办法,在网上找了这道题的各种解法,全部报“ERROR 1064 (42000)语法错误”。搞了两个多小时才知道自己错在哪里了,心态真是爆炸。特写出解决方法纪念一下Orz,顺便给出分数排名题及其解法。

问题描述: 编写一个 SQL
查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。

创建以下Scores表:

IdScore
13.50
23.65
34.00
43.85
54.00
63.65

根据上述给定的 Scores 表,你的查询应该返回(按分数从高到低排列):

ScoreRank
4.001
4.001
3.852
3.653
3.653
3.504

解法1:

SELECT s.score, (SELECT count(DISTINCT score) FROM Scores WHERE score>=s.score) AS `Rank` 
FROM Scores AS s 
ORDER BY score DESC;

解法2:

select Score,(select count(*) from (select distinct Score as s from Scores) as new_scoreswhere s >= Score) `Rank`
from Scores 
order by Score desc;

解法3:

SELECTScore,@rank := @rank + (@prev <> (@prev := Score))  `Rank`
FROMscores,(SELECT @rank := 0, @prev := -1) init
ORDER BY Score DESC;

本文发布于:2024-01-31 17:36:01,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170669376430228.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:解决方法   分数   MySQL   ERROR
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23