@[TOC]( [LeetCode-SQL]178. 分数排名(SQL)自连接 + count() 聚合函数)
1. 题目
2. 读题(需要重点注意的东西)
思路(自连接 + count() 聚合函数):
自连接可以看成是把一张表复制成两张一样的表,然后再进行多表查询
如何用count函数计算rank?
select count(distinct b.Score) from Scores b where b.Score >= a.Score) as 'rank'
如有如下工资排名400 300 300 200 100
先去重,为 400 300 200 100
- 大于400的数有0个,因此排名为1,rank置为1
- 大于300的数有1个,因此排名为2,rank置为2
- 大于200的数有2个,因此排名为3,rank置为3
- 大于100的数有3个,因此排名为4,rank置为4
3. 解法
---------------------------------------------------解法---------------------------------------------------
# Write your MySQL query statement below
# 用count函数统计比另一个表高的分数,就可以获取rank值
# 将表a中的Score和rank组合起来形成select的输出
select a.Score as Score, # 查出所有的score
(select count(distinct b.Score) from Scores b where b.Score >= a.Score) as 'rank' # 查询出排名,用count函数计算出b.Score >= a.Score的个数来计算排名
from Scores a
order by a.Score DESC # 按降序排序
可能存在的问题: