- ~
題目描述
獲取有獎金的員工相關信息。
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 dept_emp
(emp_no
int(11) NOT NULL,dept_no
char(4) NOT NULL,from_date
date NOT NULL,to_date
date NOT NULL,
PRIMARY KEY (emp_no
,dept_no
));
create table emp_bonus(
emp_no int not null,
recevied datetime not null,
btype smallint not null);
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、first_name、last_name、獎金類型btype、對應的當前薪水狀況salary以及獎金金額bonus。 bonus類型btype爲1其獎金爲薪水salary的10%,btype爲2其獎金爲薪水的20%,其餘類型均爲薪水的30%。 當前薪水錶示to_date='9999-01-01'html
本題主要考查 SQLite 中 CASE 表達式的用法。即當 btype = 1 時,獲得 salary * 0.1;當 btype = 2 時,獲得 salary * 0.2;其餘狀況獲得 salary * 0.3。詳細用法請參考: http://www.sqlite.org/lang_expr.html 中的【The CASE expression】 http://www.2cto.com/database/201202/120267.html 中的【條件表達式】 SELECT e.emp_no, e.first_name, e.last_name, b.btype, s.salary, (CASE b.btype WHEN 1 THEN s.salary * 0.1 WHEN 2 THEN s.salary * 0.2 ELSE s.salary * 0.3 END) AS bonus FROM employees AS e INNER JOIN emp_bonus AS b ON e.emp_no = b.emp_no INNER JOIN salaries AS s ON e.emp_no = s.emp_no AND s.to_date = '9999-01-01' 其實觀察測試數據會發現 btype 只有1,2,3三種狀況,即便不會 CASE 表達式,也能運用四則運算解出:(注意要除以10.0,若是除以10的話,結果的小數位會被捨去) SELECT e.emp_no, e.first_name, e.last_name, b.btype, s.salary, (s.salary * b.btype / 10.0) AS bonus FROM employees AS e INNER JOIN emp_bonus AS b ON e.emp_no = b.emp_no INNER JOIN salaries AS s ON e.emp_no = s.emp_no AND s.to_date = '9999-01-01'