您的位置:首页 > 数据库 > SQL

MySQL查询每个部门薪水TOP3

2015-04-09 14:34 190 查看
假设有两个表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    |                |

+--------------+-------------+------+-----+---------+----------------+

现在要查询每个部门的薪水TOP3,查询语句如下:

SELECT
d. NAME Department,
c. NAME Employee,
c.Salary
FROM
(
SELECT
b.DepartmentId,
b.Salary,
b. NAME,
b.rank
FROM
(
SELECT
a.DepartmentId,
a.Salary,
a. NAME,

IF (
@pa = a.DepartmentId,

IF (
@pb = a.Salary ,@rank :=@rank ,@rank :=@rank + 1
) ,@rank := 1
) rank ,@pa := a.DepartmentId ,@pb := a.Salary
FROM
(
SELECT
@rank := 0,
DepartmentId,
Salary,
NAME
FROM
Employee
ORDER BY
DepartmentId,
Salary DESC
) a
) b
HAVING
rank <= 3
) c
JOIN Department d ON (c.DepartmentId = d.Id)
ORDER BY
c.DepartmentId,
c.Salary DESC
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: