假设有两个表Department和Employee。
department的表结构如下:
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| Id | int(11) | NO | PRI | NULL | auto_increment |
| Name | varchar(60) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
employee表结构如下:
+--------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+----------------+
| Id | int(11) | NO | PRI | NULL | auto_increment |
| Name | varchar(60) | YES | | NULL | |
| Salary | double(9,2) | YES | | NULL | |
| DepartmentId | int(11) | YES | MUL | NULL | |
+--------------+-------------+------+-----+---------+----------------+
现在要查询每个部门的第N高薪水,查询语句如下:
CREATE FUNCTION getNthHighestSalary (N INT) RETURNS INT
BEGIN
RETURN (
SELECT
IFNULL(
(
SELECT
Salary
FROM
(
SELECT DISTINCT
(Salary)
FROM
Employee
ORDER BY
Salary DESC
) e
LIMIT N,
1
),
NULL
) AS SecondHighestSalary
);
END;