group by
的排序,解决同名同级问题group by
来进行去重,保证byKey
是排序的键。CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
# 设置偏移量,下方sql中无法直接 N-1
SET N := N-1;
RETURN (
SELECT
salary
FROM
employee
GROUP BY
salary
ORDER BY
salary DESC
LIMIT N, 1
);
END
可用于排序、排名的窗口函数有:
本题应该用DENSE_RANK
获取无缺口排名。
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
RETURN (
SELECT
DISTINCT salary
FROM
(SELECT
salary, DENSE_RANK() over(ORDER BY salary DESC) AS rnk
FROM
employee) t_tnk
WHERE rnk = N
);
END