61 Star 427 Fork 145

xuthus / 数据库SQL实战

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
59.获取有奖金的员工相关信息.md 1.93 KB
一键复制 编辑 原始数据 按行查看 历史
xuthus 提交于 2019-08-12 23:23 . add:all

获取有奖金的员工相关信息

题目描述

获取有奖金的员工相关信息。

给出emp_no、first_name、last_name、奖金类型btype、对应的当前薪水情况salary以及奖金金额bonus。 bonus类型btype为1其奖金为薪水salary的10%,btype为2其奖金为薪水的20%,其他类型均为薪水的30%。 当前薪水表示to_date='9999-01-01'

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`));

答案

-- 一般答案
select eb.emp_no,e.first_name,e.last_name,eb.btype,s.salary,(s.salary*btype*0.1) bonus from emp_bonus eb,employees e,salaries s where eb.emp_no = e.emp_no and eb.emp_no = s.emp_no and s.to_date = '9999-01-01'

-- 利用条件判断解法
select eb.emp_no,
       e.first_name,
       e.last_name,
       eb.btype,
       s.salary,
       (case btype
           when 1 then s.salary*0.1
           when 2 then s.salary*0.2
           when 3 then s.salary*0.3
           end
           ) bonus
from emp_bonus eb,
     employees e,
     salaries s
where eb.emp_no = e.emp_no
  and eb.emp_no = s.emp_no
  and s.to_date = '9999-01-01'

题解

简单的拼表筛选可以解决问题。但是考点是case-when语句

语法规则:

case colume 
    when condition then result
    when condition then result
    when condition then result
    else result
end
SQL
1
https://gitee.com/xuthus5/Database-SQL-Actual-Combat.git
git@gitee.com:xuthus5/Database-SQL-Actual-Combat.git
xuthus5
Database-SQL-Actual-Combat
数据库SQL实战
master

搜索帮助