首页 > 试题广场 >

将所有获取奖金的员工当前的薪水增加10%

[编程题]将所有获取奖金的员工当前的薪水增加10%
  • 热度指数:115593 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
现有员工获取到的奖金简表emp_bonus如下:
  • emp_no指获取到奖金的员工编号;
  • bytpe指获取到的奖金类型。
emp_no btype
10001 1

有员工薪资简表salaries如下:
  • emp_no指员工编号;
  • salary指薪资;
  • from_date指该薪资的开始日期;
  • to_date指该薪资的结束日期。
emp_no
salary from_date to_date
10001
10001
85097.0
88958.0
2001-06-22
2002-06-22
2002-06-22
9999-01-01

请你写出更新语句,将所有获取奖金的员工当前的(salaries.to_date='9999-01-01')薪水增加10%。(emp_bonus里面的emp_no都是当前获奖的所有员工,不考虑获取的奖金的类型)。
以上示例更新后的结果salaries为:
emp_no
salary from_date to_date
10001
10001
85097.0
97853.8
2001-06-22
2002-06-22
2002-06-22
9999-01-01
注:只需写出更新语句,后台会执行以下SQL语句,将更新后的结果与预期结果对比:
select * from salaries;

示例1

输入

drop table if exists  emp_bonus; 
drop table if exists  `salaries` ; 
create table emp_bonus(
emp_no int not null,
btype smallint not null);
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary`  float(11,1) default NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));
insert into emp_bonus values(10001,1);
INSERT INTO salaries VALUES(10001,85097,'2001-06-22','2002-06-22');
INSERT INTO salaries VALUES(10001,88958,'2002-06-22','9999-01-01');

输出

10001|85097.000|2001-06-22|2002-06-22
10001|97853.800|2002-06-22|9999-01-01
mysql
update salaries s,emp_bonus e set salary=salary*1.1 
where to_date='9999-01-01' and s.emp_no=e.emp_no
sqlite
update salaries set salary=salary*1.1 
where to_date='9999-01-01' and salaries.emp_no in (
    select emp_no from emp_bonus)



发表于 2022-06-11 19:02:01 回复(0)
update salaries set salary = salary*(1+0.1)
where salaries.emp_no in (
    select emp_bonus.emp_no 
    from emp_bonus
)
and salaries.to_date = "9999-01-01"

——果果果子
发表于 2022-03-24 11:11:06 回复(0)
update salaries 
set salary = salary * 1.1 
where to_date = "9999-01-01" and emp_no in (select s.emp_no as emp_no
                                            from salaries as s 
                                            inner join emp_bonus as eb on s.emp_no = eb.emp_no
                                            where to_date = "9999-01-01");

发表于 2022-03-12 14:11:45 回复(0)
select AA.emp_no,
case when aa.to_date='9999-01-01' 
then AA.salary*1.1 else aa.salary end salary2,
AA.from_date,AA.to_date from salaries aa
LEFT JOIN emp_bonus BB 
ON AA.EMP_NO=BB.EMP_NO
where  bb.emp_no is not null 

发表于 2022-02-08 13:11:41 回复(0)
update salaries set salary=salary+(salary*0.1)
where emp_no in(
select emp_no
from emp_bonus)
and to_date='9999-01-01'
1、先得到所有获得奖金的员工编号
2、在通过update修改对应编号的工资
3、注意最后加上to_date='9999-01-01'的限制,表示只修改在职员工工资信息
发表于 2021-12-16 11:50:03 回复(0)

做完,看完各位怒对系统,OMG
UPDATE salaries SET salary=salary*1.1
WHERE emp_no in(SELECT s.emp_no 
	FROM salaries s,emp_bonus eb
	WHERE s.emp_no=eb.emp_no
	AND s.to_date='9999-01-01')
AND to_date='9999-01-01'


发表于 2021-10-04 16:31:04 回复(0)

问题信息

难度:
7条回答 15321浏览

热门推荐

通过挑战的用户

查看代码