Leetcode Database: #177 Nth Highest Salary
题目
注意事项
Salary 排序要求是,例如前两名 Salary 相同,那么接着第三人 Salary 排名是 2
所以计算排名的方法有三种情况
不能直接
WHERE Ranking = N
,因为 SQL 计算顺序是FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY
临时列 Ranking 在计算 WHERE 时这个列尚未生成,所以需要再在外层 SELECT 一次
相同的 Salary 可能有多个,要加 DISCTINCT 去除重复值
解题思路
非常熟悉的 Ranking 类题目,解题方法就是使用自定义变量计算排名。这个题目应该比较简单,可能因为编号靠前所以通过率倒数第二。
构造测试数据
1 | CREATE TABLE IF NOT EXISTS Employee ( |
一种答案
1 | -- Runtime: 992 ms |
内层查询语句是:
1 | SELECT |
其结果:
Id | Salary | Rank | @prevVal:=Salary |
---|---|---|---|
3 | 300 | 1 | 300 |
2 | 200 | 2 | 200 |
4 | 200 | 2 | 200 |
1 | 100 | 3 | 100 |
第二步只是增加 WHERE Rank = N
和去除不需要的列
本博客微信公众号