나는 Oracle에 익숙하며 RANK() (ORDER BY score DESC) AS 순위를 사용하여 다음과 같은 순위를 얻습니다.MySQL - Oracle RANK() OVER (ORDER BY score DESC)
SET @prev_value = NULL;
SET @rank_count = 0;
SELECT score
, CASE
WHEN @prev_value = score
THEN @rank_count
WHEN @prev_value := score
THEN @rank_count := @rank_count + 1
END AS rank
FROM ...
그러나 이것은로서 돌려줍니다 :
Score | Rank
--------------
100 | 1
100 | 1
99 | 2
98 | 3
98 | 4
98 | 4
97 | 5
여기에보고 후, 나는이를 발견했습니다 -
Score | Rank
--------------
100 | 1
100 | 1
99 | 3
98 | 4
98 | 4
98 | 4
97 | 7
나는 안개가 자욱한 MySQL의에서이 작업을 수행하는 방법 없어
그건 내가 원한 것이 아니야. 당신이 Barmar의 쿼리의 속도에 가까운 얻으려면 코스 GROUP_CONCAT의
SELECT score
, FIND_IN_SET(score, @vals) rank
FROM my_scores
JOIN (SELECT @vals := GROUP_CONCAT(score ORDER BY score DESC) FROM my_scores) x;
특정 제한 사항이 있습니다 ...
SET @prev_value = NULL;
SET @rank_count = 0;
SET @rank_increasing = 0;
SELECT score
, @rank_increasing := @rank__increasing + 1 AS row_num
, CASE
WHEN @prev_value = score
THEN @rank_count
WHEN @prev_value := score
THEN @rank_count := @rank_increasing
END AS rank
FROM ...
Barmar님께 감사드립니다. – doublesidedstickytape