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
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
相关文章推荐
- MySQL查询每个部门的第N高薪水
- MySQL查询每个部门的最高薪水
- 数据库表,3个字段,姓名,薪水,部门,用一条sql语句求每个部门薪水最高的人姓名
- [翻译]如何在mysql中查询每个分组的前几名
- mysql 查询每个人、每个月的消费金额及每年的消费总额
- [MySQL] 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- 有一张员工表,有员工名称,部门编号,工资收入,查询每个部门中收入前三的人员清单
- SQL(收藏)查询每个部门工资前三名的员工信息
- 查询每个部门工资前三名的员工信息
- MySQL 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- [MySQL] 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- 查询每个部门中薪资最高的员工
- MySQL 部门 员工数量查询
- 查询50号部门员工的平均工资,如果平均工资低于5000,则每个员工工资增加1000
- [MySQL] 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- 临时记录ORACLE--查询每个部门工资前2名的员工
- [MySQL] 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- mysql 查询每个班级成绩前两名
- [MySQL] 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)