2017-05-08 45 views
-2

我想排列以下得分表,其中相同的得分将具有相同的等级。rank()函数SQL

+----+-------+ 
| Id | Score | 
+----+-------+ 
| 1 | 3.50 | 
| 2 | 4.00 | 
| 3 | 4.00 | 
| 4 | 3.50 | 
+----+-------+ 

有人可以帮助为什么是以下查询抛出语法错误?另外,逻辑不正确?

代码:

select Score, RANK() OVER (order by Score desc) as rank 
from Scores 
order by Score desc; 

错误消息:

Line 1: SyntaxError: near '(order by Score desc) as rank 
from Scores 
order by Score desc' 
+3

MYSQL犯规支持窗口功能尚未 – GurV

+0

啊哈相关的一些注意事项 - 这就是了。谢谢! –

回答

1

如:(假设你想和1居第2,而不是1和3)

SELECT x.* 
    , CASE WHEN @prev = score THEN @i:[email protected] ELSE @i:[email protected]+1 END rank 
    , @prev:=score 
    FROM my_table x 
    , (SELECT @prev:=null,@i:=0) vars 
ORDER 
    BY score DESC 
    , id; 

对于体育排名,你可以这样做:

SELECT a.* 
    , FIND_IN_SET(score, 
        (SELECT GROUP_CONCAT(score ORDER BY score DESC) 
         -- inclusion of DISTINCT here will output as above 
         FROM my_table) 
        ) x 
    FROM my_table a; 

但也有与此解决方案

+0

我认为'cross join'会比''更好,'。 – Blank

+0

这真的很聪明!不可读,但不错 – AxelH

+0

@Forward。不,这是一样的。 – Strawberry