177.第N高的薪水
Employee
返回第N高的薪水
方法:
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
DECLARE M INT;
SET M = N - 1;
RETURN (
# Write your MySQL query statement below.
select ifnull(
(select distinct Salary from Employee
order by Salary desc limit M,1), null)
as getNthHighestSalary
);
END
分析:此题可以参照(176.第二高的薪水)的思路来解题,176中使用了limit 1,1,该题中首先声明了一个M变量,并将M赋值为N-1,使limit偏移M个值便可得到结果。
178. 分数排名
Scores
编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。
结果
方法:
select s1.Score, (select count(distinct s2.Score) from Scores s2
where s2.Score>=s1.Score) as Rank
from Scores s1
order by Score desc
分析:结果中的Score可以直接使用order by Score desc进行排序。难点主要在Rank列,题目要求同一分数排名应该相同,针对要求,该方法限定只有大于或等于Score的分数才能被独立计数,并添加到Rank列。
例如结果表中,大于或等于Score列中分数3.8的数只有4.0和3.8,所以计数结果2被添加到Rank列中。