2017-05-08 1 views
-2

동일한 점수가 같은 순위를 가질 다음 점수 테이블의 순위를 지정하고 싶습니다.rank() function 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

@ 전달. 아니, 똑같아. – Strawberry