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';

 

上一篇:目标检测理论


下一篇:对象下—练习2