这道题目要求我们计算某公司特定部门员工的扣除薪资比例,我们要做的事情如下:

1. 确定总体问题

我们需要计算每个员工的扣除薪资占其标准薪资的百分比,并输出员工ID、姓名和扣除比例,并按比例降序排序。扣除薪资比例的计算公式是:扣除薪资 / 标准薪资。

2. 分析关键问题

  • 连接表:我们需要将staff_tbsalary_tb表连接起来,以便获取每个员工的薪资信息。
  • 计算扣除薪资比例:使用计算公式计算每个员工的扣除薪资比例。
  • 过滤部门:只选择部门为dep1的员工。
  • 排序输出:按扣除比例降序排序,将扣除比例以百分数形式输出,并保留一位小数。

3. 解决每个关键问题的代码及讲解

步骤1:连接表

我们使用JOINstaff_tbsalary_tb表连接起来:

from 
    staff_tb st
join 
    salary_tb tb on st.staff_id = tb.staff_id

通过员工ID进行连接,以便获取每个员工的薪资信息。

步骤2:计算扣除薪资比例

我们使用计算公式计算每个员工的扣除薪资比例,并使用ROUNDCONCAT函数格式化输出:

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;