这道题目要求我们计算某公司特定部门员工的扣除薪资比例,我们要做的事情如下:
1. 确定总体问题
我们需要计算每个员工的扣除薪资占其标准薪资的百分比,并输出员工ID、姓名和扣除比例,并按比例降序排序。扣除薪资比例的计算公式是:扣除薪资 / 标准薪资。
2. 分析关键问题
- 连接表:我们需要将
staff_tb
和salary_tb
表连接起来,以便获取每个员工的薪资信息。 - 计算扣除薪资比例:使用计算公式计算每个员工的扣除薪资比例。
- 过滤部门:只选择部门为
dep1
的员工。 - 排序输出:按扣除比例降序排序,将扣除比例以百分数形式输出,并保留一位小数。
3. 解决每个关键问题的代码及讲解
步骤1:连接表
我们使用JOIN
将staff_tb
和salary_tb
表连接起来:
from
staff_tb st
join
salary_tb tb on st.staff_id = tb.staff_id
通过员工ID进行连接,以便获取每个员工的薪资信息。
步骤2:计算扣除薪资比例
我们使用计算公式计算每个员工的扣除薪资比例,并使用ROUND
和CONCAT
函数格式化输出:
concat(round((tb.dock_salary/tb.normal_salary)*100, 1),'%') as dock_ratio
(tb.dock_salary/tb.normal_salary)*100
:计算扣除薪资占标准薪资的百分比,即扣除薪资 / 标准薪资 * 100(%)。ROUND(..., 1)
:将结果四舍五入保留一位小数。CONCAT(..., '%')
:将结果格式化为百分数。
步骤3:过滤部门
我们使用WHERE
子句只选择部门为dep1
的员工:
where
st.department = 'dep1'
步骤4:排序输出
我们使用ORDER BY
按扣除比例降序排序输出结果:
order by
dock_ratio desc
完整代码
select
st.staff_id,
st.staff_name,
concat(round((tb.dock_salary/tb.normal_salary)*100, 1),'%') as dock_ratio
from
staff_tb st
join
salary_tb tb on st.staff_id = tb.staff_id
where
st.department = 'dep1'
order by
dock_ratio desc;