条件:
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';