mirror of https://github.com/dunwu/db-tutorial.git
49 lines
1.2 KiB
SQL
49 lines
1.2 KiB
SQL
-- 第N高的薪水
|
||
--
|
||
-- 编写一个 SQL 查询,获取 Employee 表中第 n 高的薪水(Salary)。
|
||
--
|
||
-- +----+--------+
|
||
-- | Id | Salary |
|
||
-- +----+--------+
|
||
-- | 1 | 100 |
|
||
-- | 2 | 200 |
|
||
-- | 3 | 300 |
|
||
-- +----+--------+
|
||
-- 例如上述 Employee 表,n = 2 时,应返回第二高的薪水 200。如果不存在第 n 高的薪水,那么查询应返回 null。
|
||
--
|
||
-- +------------------------+
|
||
-- | getNthHighestSalary(2) |
|
||
-- +------------------------+
|
||
-- | 200 |
|
||
-- +------------------------+
|
||
|
||
USE db_tutorial;
|
||
CREATE TABLE IF NOT EXISTS employee (
|
||
id INT PRIMARY KEY AUTO_INCREMENT,
|
||
salary INT
|
||
);
|
||
|
||
INSERT INTO employee(salary)
|
||
VALUES (100);
|
||
INSERT INTO employee(salary)
|
||
VALUES (200);
|
||
INSERT INTO employee(salary)
|
||
VALUES (300);
|
||
|
||
SELECT DISTINCT salary
|
||
FROM employee e
|
||
WHERE 1 = (SELECT COUNT(DISTINCT salary)
|
||
FROM employee
|
||
WHERE salary >= e.salary);
|
||
|
||
CREATE FUNCTION getNthHighestSalary(n INT) RETURNS INT
|
||
BEGIN
|
||
RETURN (
|
||
SELECT DISTINCT salary
|
||
FROM employee e
|
||
WHERE n = (SELECT COUNT(DISTINCT salary)
|
||
FROM employee
|
||
WHERE salary >= e.salary)
|
||
);
|
||
END
|