如何编写SQL查询获取资历最浅员工的薪资信息?
问题与解决方案
表结构与测试数据
首先是创建employee表及插入测试数据的SQL语句:
create table employee( employ_id int (11),employee_name varchar(30),exp_in_months int(20),monthly_salary float ); insert into employee values ('1','manjesh','30', '11000'); insert into employee values ('2','raj','10', '5000'); insert into employee values ('3','johny','15', '8000'); insert into employee values ('4','joy','12', '7000'); insert into employee values ('11','pooja','10', '46000'); insert into employee values ('20','radha','40', '46000'); insert into employee values ('5','kirthi','10', '6500');
需求说明
需要实现两个目标之一:
- 找出资历最浅(
exp_in_months最小,即10个月)的员工Raj、Pooja、Kirthi的月薪,且按数据输入顺序输出结果 - 计算公司内所有资历最浅员工的薪资总额
原代码问题
你写的原SQL只查询了表中的最低月薪,既没有关联“资历最浅”的条件,也没有筛选目标员工,完全不符合需求。
解决方案
方案1:获取指定资历最浅员工的月薪(按输入顺序输出)
通过子查询先找到最小的资历值,再筛选符合条件的员工,并用FIELD函数保证输出顺序和数据输入顺序一致:
SELECT employee_name, monthly_salary FROM employee WHERE exp_in_months = (SELECT MIN(exp_in_months) FROM employee) AND employee_name IN ('Raj', 'Pooja', 'Kirthi') ORDER BY FIELD(employee_name, 'Raj', 'Pooja', 'Kirthi');
执行后会得到结果:
| employee_name | monthly_salary |
|---|---|
| Raj | 5000 |
| Pooja | 46000 |
| Kirthi | 6500 |
方案2:计算所有资历最浅员工的薪资总额
同样通过子查询锁定资历最浅的员工群体,再对月薪求和:
SELECT SUM(monthly_salary) AS total_salary_of_least_experienced FROM employee WHERE exp_in_months = (SELECT MIN(exp_in_months) FROM employee);
执行后会得到总额:57500(5000+46000+6500)
内容的提问来源于stack exchange,提问作者Raj saxena
相关产品推荐
相关产品推荐

