题1.
查询 Employee
表中第 n
高的工资。如果没有第 n
个最高工资,查询结果应该为 null
。
记录.
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
DECLARE c INT DEFAULT 0; #定义局部变量
select n-1 into c;#赋值语句
RETURN (
# Write your MySQL query statement below.
select
(
select distinct salary from Employee
order by salary desc
limit 1 offset c
)as getNthHighestSalary
);
END
区别于记录8中的题1,此处需要使用Mysql中的create function框架,这方面的知识参考了这篇博文:https://blog.csdn.net/baiyexing1/article/details/110481530
题2.
编写一个解决方案来查询分数的排名。排名按以下规则计算:
- 分数应按从高到低排列。
- 如果两个分数相等,那么两个分数的排名应该相同。
- 在排名相同的分数后,排名数应该是下一个连续的整数。换句话说,排名之间不应该有空缺的数字。
按 score
降序返回结果表。
记录.
select
score,
dense_rank() over (order by score desc) as "rank"
from
Scores
这题原本不难,但中间遇到了波折,因为rank是Mysql自带的关键词而不能作为列名,因此频繁报错,最后加了对引号解决了问题。