对于employee表中的每个雇员,在层次结构中查找直接和间接boss的数量

问题描述 投票:2回答:1

我得到一个雇员表,看起来像这样:

enter image description here

查询以创建示例输入。

CREATE TABLE employee(
    empId INTEGER,
    empName VARCHAR(20),
    mgrId INTEGER,
    salary DECIMAL(12,2)
);

INSERT INTO employee VALUES
(1, 'A', 2, 100),
(2, 'B', 4, 150),
(3, 'C', 4, 165),
(4, 'D', 7, 200),
(5, 'E', 6, 210),
(6, 'F', 7, 250),
(7, 'G', 7, 300),
(8, 'H', 6, 170);

链接到SQL Fiddle:http://sqlfiddle.com/#!9/cd4be8

此样本数据导致此层次结构。

enter image description here

每个员工都有一个直接上司。同样,将所有在给定雇员之上的雇员称为间接老板。在给定的样本中,A的直接老板是B,而C,D,E,F,G和H是A的间接老板。我需要找到两件事。

  1. [对于每个雇员,找到该雇员之前所有雇员的人数(直接上司+间接上司的数量)。

预期输出:

+---------+-------+
| empName | total |
+---------+-------+
| A       |     7 |
| B       |     3 |
| C       |     3 |
| D       |     1 |
| E       |     3 |
| F       |     1 |
| G       |     0 |
| H       |     3 |
+---------+-------+
  1. 对于每个雇员,以这样一种方式找到间接老板,即间接老板的薪水至少是给定雇员薪水的两倍,但在间接老板中最低。

预期输出:

+---------+------+
| empName | mgr  |
+---------+------+
| A       | D    |
| B       | G    |
| C       | NULL |
| D       | NULL |
| E       | NULL |
| F       | NULL |
| G       | NULL |
| H       | NULL |
+---------+------+

说明:对于雇员A(薪水= 100),具有至少双倍薪水的间接老板是D(薪水= 200),F(薪水= 210)和G(薪水= 300)。但是由于D的薪水是D,F和G的最小值,所以结果是D。

很容易找到员工下属的人数,但反之则非常棘手。任何帮助/提示将不胜感激。

mysql sql hierarchy
1个回答
0
投票

我希望您能找到以下答案,直到找到更理想的解决方案为止。

© www.soinside.com 2019 - 2024. All rights reserved.