首页 > 数据库 >牛客——SQL253 获取有奖金的员工相关信息

牛客——SQL253 获取有奖金的员工相关信息

时间:2023-09-06 09:34:34浏览次数:35  
标签:INSERT 06 10001 奖金 SQL253 INTO salaries 牛客 VALUES

描述

现有员工表employees如下:

emp_no birth_date first_name last_name gender hire_date
10001 1953-09-02 Georgi Facello M 1986-06-26
10002 1964-06-02 Bezalel Simmel F 1985-11-21

有员工奖金表emp_bonus:

emp_no recevied btype
10001 2010-01-01 1
10002 2010-10-01 2

有薪水表salaries:

emp_no salary from_date to_date
10001 60117 1986-06-26 1987-06-26
10001 62102 1987-06-26 1988-06-25
10001 66074 1988-06-25 1989-06-25
10001 66596 1989-06-25 1990-06-25
10001 66961 1990-06-25 1991-06-25
10001 71046 1991-06-25 1992-06-24
10001 74333 1992-06-24 1993-06-24
10001 75286 1993-06-24 1994-06-24
10001 75994 1994-06-24 1995-06-24
10001 76884 1995-06-24 1996-06-23
10001 80013 1996-06-23 1997-06-23
10001 81025 1997-06-23 1998-06-23
10001 81097 1998-06-23 1999-06-23
10001 84917 1999-06-23 2000-06-22
10001 85112 2000-06-22 2001-06-22
10001 85097 2001-06-22 2002-06-22
10001 88958 2002-06-22 9999-01-01
10002 72527 1996-08-03 1997-08-03
10002 72527 1997-08-03 1998-08-03
10002 72527 1998-08-03 1999-08-03
10002 72527 1999-08-03 2000-08-02
10002 72527 2000-08-02 2001-08-02
10002 72527 2001-08-02 9999-01-01
  • 其中bonus类型btype为1其奖金为薪水salary的10%,btype为2其奖金为薪水的20%,其他类型均为薪水的30%。 to_date='9999-01-01'表示当前薪水。
  • 请你给出emp_no、first_name、last_name、奖金类型btype、对应的当前薪水情况salary以及奖金金额bonus。
  • bonus结果保留一位小数,输出结果按emp_no升序排序。

以上数据集的输出结果如下:

emp_no first_name last_name btype salary bonus
10001 Georgi Facello 1 88958 8895.8
10002 Bezalel Simmel 2 72527 14505.4

示例1:

drop table if exists  `employees` ; 
drop table if exists  emp_bonus; 
drop table if exists  `salaries` ; 
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 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`));
insert into emp_bonus values
(10001, '2010-01-01',1),
(10002, '2010-10-01',2);
INSERT INTO employees VALUES(10001,'1953-09-02','Georgi','Facello','M','1986-06-26');
INSERT INTO employees VALUES(10002,'1964-06-02','Bezalel','Simmel','F','1985-11-21');

INSERT INTO salaries VALUES(10001,60117,'1986-06-26','1987-06-26');
INSERT INTO salaries VALUES(10001,62102,'1987-06-26','1988-06-25');
INSERT INTO salaries VALUES(10001,66074,'1988-06-25','1989-06-25');
INSERT INTO salaries VALUES(10001,66596,'1989-06-25','1990-06-25');
INSERT INTO salaries VALUES(10001,66961,'1990-06-25','1991-06-25');
INSERT INTO salaries VALUES(10001,71046,'1991-06-25','1992-06-24');
INSERT INTO salaries VALUES(10001,74333,'1992-06-24','1993-06-24');
INSERT INTO salaries VALUES(10001,75286,'1993-06-24','1994-06-24');
INSERT INTO salaries VALUES(10001,75994,'1994-06-24','1995-06-24');
INSERT INTO salaries VALUES(10001,76884,'1995-06-24','1996-06-23');
INSERT INTO salaries VALUES(10001,80013,'1996-06-23','1997-06-23');
INSERT INTO salaries VALUES(10001,81025,'1997-06-23','1998-06-23');
INSERT INTO salaries VALUES(10001,81097,'1998-06-23','1999-06-23');
INSERT INTO salaries VALUES(10001,84917,'1999-06-23','2000-06-22');
INSERT INTO salaries VALUES(10001,85112,'2000-06-22','2001-06-22');
INSERT INTO salaries VALUES(10001,85097,'2001-06-22','2002-06-22');
INSERT INTO salaries VALUES(10001,88958,'2002-06-22','9999-01-01');
INSERT INTO salaries VALUES(10002,72527,'1996-08-03','1997-08-03');
INSERT INTO salaries VALUES(10002,72527,'1997-08-03','1998-08-03');
INSERT INTO salaries VALUES(10002,72527,'1998-08-03','1999-08-03');
INSERT INTO salaries VALUES(10002,72527,'1999-08-03','2000-08-02');
INSERT INTO salaries VALUES(10002,72527,'2000-08-02','2001-08-02');
INSERT INTO salaries VALUES(10002,72527,'2001-08-02','9999-01-01');

输出:

10001|Georgi|Facello|1|88958|8895.8
10002|Bezalel|Simmel|2|72527|14505.4

我的解题思路:

这题比较简单,主要考察表连接,相同字段可以使用using连接

1.找出员工的当前薪水

select emp_no,
       salary
from salaries
where to_date = '9999-01-01'

2.表内连接,之后使用case when 求出奖金

case e2.btype
   when 1 then round(salary * 0.1, 1)
   when 2 then round(salary * 0.2, 1)
   else round(salary * 0.3, 1) end as bonus

完整代码:

select e1.emp_no,
       first_name,
       last_name,
       e2.btype,
       e3.salary,
       case e2.btype
           when 1 then round(salary * 0.1, 1)
           when 2 then round(salary * 0.2, 1)
           else round(salary * 0.3, 1) end as bonus
from employees e1
         inner join emp_bonus e2 using (emp_no)
         inner join (select emp_no,
                           salary
                    from salaries
                    where to_date = '9999-01-01') e3
                   using (emp_no)
;

标签:INSERT,06,10001,奖金,SQL253,INTO,salaries,牛客,VALUES
From: https://www.cnblogs.com/moliyy/p/17681443.html

相关文章

  • 2023牛客暑期多校训练营9
    D.Non-Puzzle:ErrorPermutation题意:给出一个排列,计算其有多少个子区间,满足区间内的第\(i\)个数不是第\(i\)小的数Solution首先明白一点,对于一个数,它的大小排序只会变大而不会变小,变大的要求是后面遇到比它小的数。所以我们可以发现,对于一个数,它会有以下几种情况:1.在开始的......
  • 牛客——SQL166 每天的日活数及新用户占比
    描述用户行为日志表tb_user_logiduidartical_idin_timeout_timesign_cin110190012021-10-3110:00:002021-10-3110:00:090210290012021-10-3110:00:002021-10-3110:00:090310102021-11-0110:00:002021-11-0110:00:421410290012021......
  • 2023牛客多校训练营2
    B.LinkwithRailwayCompany最大权闭合子图问题,树链剖分建图求解简述最大权闭合子图:现有一有向图,所有点都有一个权值,你需要选择一个子图,使得子图所有点的出边都指向子图内部,问子图最大权考虑网络流,源点向所有正权点连流量为权值的边,所有负权点向汇点连流量为权值绝对值的边,......
  • 【牛客周赛 Round 10】A-D题解
    Ahttps://ac.nowcoder.com/acm/contest/64272/A题意游游定义一个数组为“稳定的”,当且仅当数组相邻的两个元素之差的绝对值不超过1。例如[2,3,2,2,1]是稳定的,而[1,3,2]则不是稳定的。游游拿到了一个数组,她想求出该数组的最长的“稳定的”连续子数组的长度。题解首先,如果在某......
  • 【牛客小白77】D 字符串哈希
    https://ac.nowcoder.com/acm/contest/64384/D题意给你一串长度为\(n(n\leq10^6)\)的密码,它是顺序输入的,如果截止到某一位,输入的最后\(m\)个字符是密码,那么之前输入的所有东西都清除。问目前检测到\(k(m*k\leqn)\)次输入成功,问密码可能的种类数思路很容易想到枚举......
  • 牛客小白月赛77 C题解 | 小Why的商品归位
    原题链接先不考虑车子的容量问题,因为结束位置保证是在起始位置之后的,那我们从前往后扫,发现是可以知道每个点时的车内的商品。但是现在有了容量限制,我们怎么办呢,如果对于一段,k都是大于每个点的货物量时,可以一趟装完,但是如果大于k就需要不知一次,可以发现所需的其实是该段的最大......
  • 牛客——SQL255 给出employees表中排名为奇数行的first_name
    描述对于employees表中,输出first_name排名(按first_name升序排序)为奇数的first_name输出格式:firstGeorgiAnneke请你在不打乱原序列顺序的情况下,输出:按first_name排升序后,取奇数行的first_name。如对以上示例数据的first_name排序后的序列为:Anneke、Bezalel......
  • 牛客练习赛114
    B题是纯数学期望推导,用到错位相减,注意数学式子推导过程中一些常数不要丢掉,由于式子其中一部分非常复杂导致计算出来后忘掉最初式子。c题待补D题是贪心,需要找到最优策略。策略是倒着推并且遇到当前数出现次数比他的出现次数多时就停下。不停下会导致多出现的呢个数没有数列带它走......
  • C-小美的01串翻转_牛客周赛 Round 9
    链接:https://ac.nowcoder.com/acm/contest/63869/C来源:牛客网题目描述小美定义一个01串的权值为:每次操作选择一位取反,使得相邻字符都不相等的最小操作次数。例如,"10001"的权值是1,因为只需要修改一次:对第三个字符取反即可。现在小美拿到了一个01......
  • 牛客——SQL165 统计活跃间隔对用户分级结果
    描述用户行为日志表tb_user_logiduidartical_idin_timeout_timesign_cin110990012021-08-3110:00:002021-08-3110:00:090210990022021-11-0411:00:552021-11-0411:00:590310890012021-09-0110:00:012021-09-0110:01:500410890012......