mysql-leetcode
176.第2高薪水
1 | SELECT IFNULL(( |
177.第N高薪水
- 经典排序问题:
- row_number() - 连续排名,3000、2000、2000、1000 -> 1,2,3,4
- rank() - 同薪同名不连续,3000、2000、2000、1000 -> 1,2,2,4
- dense_rank() - 同薪同名连续,3000、2000、2000、1000 -> 1,2,2,3
- ntile() - 分桶排名,即首先按桶的个数分出第一二三桶,然后各桶内从1排名,实际不是很常用
- 第3种实现:
- 窗口函数
LIMITE
后面只能接正整数,变量表达式负数0都不可以GROUP BY
给同薪分组1
2
3
4
5
6
7
8
9
10
11
12
13
14CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
SET N := N-1;
RETURN (
# Write your MySQL query statement below.
SELECT IFNULL((
SELECT DISTINCT Salary
FROM Employee
GROUP BY Salary
ORDER BY Salary DESC
LIMIT N,1
),NULL)
);
END178.分数排名
1
2
3
4SELECT
Score,
dense_rank() over(ORDER BY Score DESC) AS 'Rank'
FROM Scores