背景介绍
在数据库管理中,了解不同职位类型的员工薪资水平是人力资源分析的重要部分。通过SQL查询,我们可以有效地获取这些信息,帮助决策者做出更加合理的薪酬调整和预算规划。
数据表结构
本示例涉及两个数据表:员工职称表(titles)和薪水表(salaries)。这两个表的结构如下所示:
员工职称表(titles):
CREATE TABLE titles ( emp_no int(11) NOT NULL, title varchar(50) NOT NULL, from_date date NOT NULL, to_date date DEFAULT NULL );
薪水表(salaries):
CREATE TABLE `salaries` ( `emp_no` int(11) NOT NULL, `salary` int(11) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL, PRIMARY KEY (`emp_no`,`from_date`) );
其中,emp_no
表示员工编号,title
表示职位名称,salary
表示薪资金额,from_date
和to_date
分别表示记录的有效起止日期。
查询实现
为了计算每个职位类型的平均薪资,我们需要将两个表进行连接,并筛选出当前有效的薪资记录(即to_date = '9999-01-01'
),然后根据职位分组并计算平均薪资。最后,将结果按照平均薪资升序排列。具体的SQL查询语句如下:
SELECT t.title, AVG(s.salary) AS average_salary FROM titles t JOIN salaries s ON t.emp_no = s.emp_no WHERE t.to_date = '9999-01-01' AND s.to_date = '9999-01-01' GROUP BY t.title ORDER BY average_salary ASC;
此查询首先通过JOIN
操作将titles
和salaries
表连接起来,确保我们处理的是当前有效的职位和薪资记录。接着,使用GROUP BY
对不同的职位进行分组,并使用AVG()
函数计算每个职位的平均薪资。最后,使用ORDER BY
按平均薪资的升序对结果进行排序。
执行结果
执行上述SQL查询后,你将获得一个列表,该列表显示了每个职位类型的名称及其对应的平均薪资,列表按照平均薪资从低到高排序。例如:
提交结果表明,该查询能够准确地返回所需的数据,运行时间为14ms,占用内存为3324KB,使用的是Sqlite数据库,所有测试用例均通过。