StarkerSong Get Busy Living

leetcode数据库总结(4)-Rank Scores

2016-09-23

178. Rank Scores

表结构

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

问题描述

写个SQL语句查询分数排行。如果分数相同,那么排名相同。下个排名应该是连续的整数,即排名间没有间隔。最后排名的结果如下表:

+-------+------+
| Score | Rank |
+-------+------+
| 4.00  | 1    |
| 4.00  | 1    |
| 3.85  | 2    |
| 3.65  | 3    |
| 3.65  | 3    |
| 3.50  | 4    |
+-------+------+

解决方案

# Write your MySQL query statement below

select Score,
(select count(1) from 
        (select distinct Score from Scores) s 
        where s.Score>=Scores.Score
        )   Rank 
from Scores  
order by Score desc

可以将上面的语句拆分,先使用select distinct Score from Scores查询去除重复的数据元素。然后再从Scores表中查询分数,统计s表中大于等于Scores表中数据元素的个数。

总结

该查询重点在于建立业务的分析模型,提取不重复数据,然后进行表连接操作。


Similar Posts

Comments