首页 > 试题广场 >

查找所有员工入职时候的薪水情况

[编程题]查找所有员工入职时候的薪水情况
  • 热度指数:346474 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序(请注意,一个员工可能有多次涨薪的情况)
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
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 salary
10011 25828
省略 省略
10001 60117
示例1

输入

输出

头像 vircent
发表于 2020-01-03 14:59:44
方法一:获取salaries中from_data中最小的对应的salary和emp_no,因为salaries可能涨薪,所以这张表一个员工可能有多条记录。 SELECT emp_no, salary FROM salaries GROUP BY emp_no H 展开全文
头像 城志
发表于 2020-02-17 15:48:25
1. 分析 使用内联结和FROM并列两表都可以,但要注意新入职日期的匹配。 内联结和自联结的区别:内联结是取左右两张表的交集形成一个新表。FROM并列两表后仍然还是两张表。如果还要对新表进行操作则要用内连接。从效率上看应该FROM并列查询比较快,因为不用形成新表。2. 代码 SELECT e.em 展开全文
头像 小水滴真的是太可爱了吧
发表于 2020-04-24 00:00:45
select s.emp_no,s.salary from salaries as s inner join employees as e where s.from_date = e.hire_date and e.emp_no = s.emp_no order by s.emp_no desc;
头像 N刻后告诉你
发表于 2020-05-19 20:29:15
题目:查找所有员工入职时候的薪水情况,给出emp_no以及salary,并按照emp_no进行逆序 方法1:子查询select s.emp_no, s.salaryfrom salaries as swhere from_date = (select e.hire_date from employe 展开全文
头像 Ok内推大师兄
发表于 2020-03-23 16:23:15
因为 salaries 的数据比 employees 的数据多(员工会涨薪)所以我们要有e.emp_no = s.emp_no select s.emp_no,s.salary from salaries s inner join employees e where s.from_date = e. 展开全文
头像 歪比巴卜OvO
发表于 2020-12-03 23:03:39
使用子查询使时间等于最小时间 select s1.emp_no, s1.salary from salaries s1 where s1.from_date = ( select min(s2.from_date) from salaries s2 where s2.emp_no = 展开全文
头像 热爱生活的大魔王一定要上岸
发表于 2020-06-15 09:09:33
感觉除了inner join的方法之外,最合理的不是那个(我初学没太看懂)having的,而是这样能够在 e.hire_date 和 s.from_date 不匹配时依然取出有工资记录的员工的第一条 salary 记录。
头像 白伟仝
发表于 2020-06-26 18:56:06
select distinct employees.emp_no, salaries.salary from employees, salaries where employees.emp_no=salaries.emp_no and employees.hire_date between sala 展开全文
头像 高质量搬砖人
发表于 2021-01-29 10:34:40
方法1)员工入职时的薪水记录日期 即 员工入职日期 SELECT e.emp_no, s.salary FROM employees AS e JOIN salaries AS s ON e.em 展开全文
头像 hello-coder
发表于 2021-02-01 06:17:52
此题的解题关键在于,找到每个员工的入职时间。一种思路是使用关联子查询。代码如下: select emp_no, salary from salaries s1 where from_date <= all(select from_date from 展开全文

问题信息

难度:
307条回答 45844浏览

热门推荐

通过挑战的用户