178. Rank Scores

Write a SQL query to rank scores. If there is a tie between two scores, both should have the same ranking. Note that after a tie, the next ranking number should be the next consecutive integer value. In other words, there should be no "holes" between ranks.

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

For example, given the above Scores table, your query should generate the following report (order by highest score):

+-------+------+
| Score | Rank |
+-------+------+
| 4.00  | 1    |
| 4.00  | 1    |
| 3.85  | 2    |
| 3.65  | 3    |
| 3.65  | 3    |
| 3.50  | 4    |
+-------+------+
 1 # Write your MySQL query statement below
 2 SELECT Score,(
 3     SELECT COUNT(*)
 4     FROM ((SELECT DISTINCT Score AS S
 5             FROM Scores 
 6             ) AS tmp)
 7     WHERE Score <= S ) AS RANK
 8     
 9 FROM Scores
10 ORDER BY Score DESC;
1 # Write your MySQL query statement below
2 SELECT Score,(
3     SELECT COUNT(DISTINCT Score) FROM Scores AS S1
4     WHERE S1.Score >= S2.Score) AS RANK
5     
6 FROM Scores AS S2
7 ORDER BY Score DESC;
 1 select Score, rank
 2 from Scores a
 3 left join
 4     (select dscore, @rank := @rank + 1 as rank
 5     from 
 6         (select distinct Score as dscore
 7         from Scores
 8         order by dscore desc) s,
 9         (select @rank := 0) r
10      ) as b
11 on a.Score = b.dscore
12 order by Score desc
原文地址:https://www.cnblogs.com/hyxsolitude/p/12296295.html