自行建表查询
Chivas-Regal
# 牛客SQL206-获取每个部门中当前员工薪水最高的相关信息
# 🔗
# 💡
薪水是部门中的最高薪水,来一张 (部门,最高薪水) 的表
SELECT
d.dept_no,
MAX(s.salary) maxSalary
FROM
dept_emp d,
salaries s
WHERE
d.emp_no = s.emp_no
GROUP BY d.dept_no
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
得到表 t1
dept_no | maxSalary |
---|---|
d001 | 88958 |
d002 | 92527 |
紧接着我们需要组合进 “员工号” ,故再开一张 (员工号,部门,薪水) 的表
SELECT
d.dept_no,
d.emp_no,
s.salary
FROM
dept_emp d,
salaries s
WHERE
d.emp_no = s.emp_no
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
得到表 t2
dept_no | emp_no | salary |
---|---|---|
d001 | 10001 | 88958 |
d001 | 10002 | 72527 |
d002 | 10003 | 92527 |
在 t2
中找能匹配到 t1
的项
组合两表进行查询,令 dept_no
与 salary
均一致即可
# ✅
SELECT
t1.dept_no,
t2.emp_no,
t1.maxSalary
FROM
(
SELECT
d.dept_no,
MAX(s.salary) maxSalary
FROM
dept_emp d,
salaries s
WHERE
d.emp_no = s.emp_no
GROUP BY d.dept_no
) t1
,
(
SELECT
d.dept_no,
d.emp_no,
s.salary
FROM
dept_emp d,
salaries s
WHERE
d.emp_no = s.emp_no
) t2
WHERE
t1.dept_no = t2.dept_no AND
t1.maxSalary = t2.salary
ORDER BY
t1.dept_no;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 牛客SQL215-查找在职员工自入职以来的薪水涨幅情况
# 🔗
# 💡
有涨幅,那就一定要做 在职现在的工资 和 刚入职时的工资 的差
这可以分为两部分,我们先建立一下查询 刚入职时的工资 table: t_comein
就是让 salaries
表的起始时间 from_date
和 employees
表的入职时间 hire_date
对应起来
SELECT
e.emp_no,
s.salary
FROM
employees e,
salaries s
WHERE
s.emp_no = e.emp_no AND
s.from_date = e.hire_date
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
然后是 在职现在的工资 table: t_leave
这个很好弄,就是保证 to_date = '9999-01-01'
即可
然后为了和上面表格式一样,我们依然要把工号输出来
SELECT
s.emp_no,
s.salary
FROM
salaries s
WHERE
s.to_date = '9999-01-01'
1
2
3
4
5
6
7
2
3
4
5
6
7
在建的这两张表进行查询,让两表工号一致下,第二列为 t_leave.salary - t_comein.salary
即可
# ✅
SELECT
t_leave.emp_no,
(t_leave.salary - t_comein.salary) as growth
FROM
(
SELECT
e.emp_no,
s.salary
FROM
employees e,
salaries s
WHERE
s.emp_no = e.emp_no AND
s.from_date = e.hire_date
) t_comein,
(
SELECT
s.emp_no,
s.salary
FROM
salaries s
WHERE
s.to_date = '9999-01-01'
) t_leave
WHERE
t_leave.emp_no = t_comein.emp_no
ORDER BY
growth;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28