根据员工工种匹配他们的所属工种的最低和最高薪水(在jobs表里头),新建一列名为:“我和我的工种是否匹配”,如果员工薪水不属于他所属工种的薪资范围内,新建的列就填“否”,否则填“是”。然后再根据部门、我和我的工种是否匹配这两列求薪水平均水平和分别多少人。
时间: 2024-11-12 21:36:25 浏览: 12
首先,我们需要从`employees`表中获取员工的工种和薪水,同时从`jobs`表中找到对应工种的最低和最高薪资。假设员工ID与`jobs`表中的`id`相对应。在SQL查询中,这可以这样做:
```sql
SELECT
e.employee_id,
e.salary,
j.job_title,
j.min_salary,
j.max_salary,
CASE
WHEN e.salary BETWEEN j.min_salary AND j.max_salary THEN '是'
ELSE '否'
END AS 是否匹配工种,
departments.department_name,
departments.department_id
FROM
employees e
JOIN
jobs j ON e.job_title = j.title
JOIN
departments ON e.department_id = departments.id;
然后,我们可以对结果进行进一步的分组和分析,计算每个部门按照工种匹配情况的平均薪水和人数:
```sql
SELECT
departments.department_name,
departments.department_id,
job_match,
AVG(e.salary) AS 平均薪水平,
COUNT(*) AS 人数
FROM
(
-- 原始查询结果
) subquery
GROUP BY
departments.department_name,
departments.department_id,
job_match;
```
在这个子查询结果中,`job_match`将是我们之前定义的"我和我的工种是否匹配"列的值。它会帮助我们在每个部门中区分出薪水在范围内的员工和不在范围内的员工。
阅读全文