SQL59 获取有奖金的员工相关信息
2021/9/5 19:41:42
本文主要是介绍SQL59 获取有奖金的员工相关信息,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
条件:
1 CREATE TABLE `employees` ( 2 `emp_no` int(11) NOT NULL, 3 `birth_date` date NOT NULL, 4 `first_name` varchar(14) NOT NULL, 5 `last_name` varchar(16) NOT NULL, 6 `gender` char(1) NOT NULL, 7 `hire_date` date NOT NULL, 8 PRIMARY KEY (`emp_no`)); 9 10 11 CREATE TABLE `dept_emp` ( 12 `emp_no` int(11) NOT NULL, 13 `dept_no` char(4) NOT NULL, 14 `from_date` date NOT NULL, 15 `to_date` date NOT NULL, 16 PRIMARY KEY (`emp_no`,`dept_no`)); 17 create table emp_bonus( 18 emp_no int not null, 19 received datetime not null, 20 btype smallint not null); 21 22 23 CREATE TABLE `salaries` ( 24 `emp_no` int(11) NOT NULL, 25 `salary` int(11) NOT NULL, 26 `from_date` date NOT NULL, 27 `to_date` date NOT NULL, PRIMARY KEY (`emp_no`,`from_date`));
要求:
1、给出emp_no、first_name、last_name、奖金类型btype、对应的当前薪水情况salary以及奖金金额bonus;
2、bonus类型btype为1其奖金为薪水salary的10%,btype为2其奖金为薪水的20%,其他类型均为薪水的30%;
3、当前薪水表示to_date='9999-01-01'。
解析:
这道题的难点在于找出salary和bonus之间的关系,并且怎么表达出来
由2可知,两者之间的关系是 bonus = salary * btype * 0.1 (注意,尽量不用除法,并且结果涉及到小数时,除数和乘数都要精确到相应的位数)
该题还有一个易错的地方,那就是to_date的条件容易令人忽视
代码:
1 select em.emp_no, em.first_name, em.last_name, eb.btype, sa.salary, 2 ( salary * btype * 0.1 ) as bonus 3 from employees as em, emp_bonus as eb, salaries as sa 4 where em.emp_no = eb.emp_no 5 and sa.emp_no = eb.emp_no 6 and sa.to_date = '9999-01-01';
这篇关于SQL59 获取有奖金的员工相关信息的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南