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表:

Id Score
1 3.50
2 3.65
3 4.00
4 3.85
5 4.00
6 3.65

根據上述給定的 Scores 表,你的查詢應該返回(按分數從高到低排列):

Score Rank
4.00 1
4.00 1
3.85 2
3.65 3
3.65 3
3.50 4

解法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_scores
	where s >= Score) `Rank`
from Scores 
order by Score desc;

解法3:

SELECT
  Score,
  @rank := @rank + (@prev <> (@prev := Score))  `Rank`
FROM
  scores,
  (SELECT @rank := 0, @prev := -1) init
ORDER BY Score DESC;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章