1873. 计算特殊奖金

204 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第18天,点击查看活动详情

一、题目

表: Employees

+-------------+---------+
| 列名        | 类型     |
+-------------+---------+
| employee_id | int     |
| name        | varchar |
| salary      | int     |
+-------------+---------+

employee_id 是这个表的主键。 此表的每一行给出了雇员id ,名字和薪水。  

写出一个SQL 查询语句,计算每个雇员的奖金。如果一个雇员的id是奇数并且他的名字不是以'M'开头,那么他的奖金是他工资的100%,否则奖金为0。

Return the result table ordered by employee_id.

返回的结果集请按照employee_id排序。

查询结果格式如下面的例子所示。

 

示例 1:

输入: Employees 表:

+-------------+---------+--------+
| employee_id | name    | salary |
+-------------+---------+--------+
| 2           | Meir    | 3000   |
| 3           | Michael | 3800   |
| 7           | Addilyn | 7400   |
| 8           | Juan    | 6100   |
| 9           | Kannon  | 7700   |
+-------------+---------+--------+

输出:

+-------------+-------+
| employee_id | bonus |
+-------------+-------+
| 2           | 0     |
| 3           | 0     |
| 7           | 7400  |
| 8           | 0     |
| 9           | 7700  |
+-------------+-------+

解释: 因为雇员id是偶数,所以雇员id 是2和8的两个雇员得到的奖金是0。 雇员id为3的因为他的名字以'M'开头,所以,奖金是0。 其他的雇员得到了百分之百的奖金。

来源:力扣(LeetCode)

链接:leetcode.cn/problems/ca…

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、解题思路

创建数据表

根据题意和数据类型创建数据表

CREATE TABLE Employees(
	employee_id INT PRIMARY KEY,
	NAME VARCHAR(20),
	salary INT
);
INSERT INTO Employees VALUES 
(2,"Meir",3000),
(3,"Michael",3800),
(7,"Addilyn",7400),
(8,"Juan",6100),
(9,"Kannon",7700);
  • 填充数据如下

image.png

条件查询

这里条件是如果一个雇员的id是奇数并且他的名字不是以'M'开头,那么他的奖金是他工资的100%,否则奖金为0。

// 查询条件 id为奇数
SELECT employee_id, salary bonus FROM Employees WHERE Employees.employee_id % 2 != 0;

SELECT employee_id, salary bonus FROM Employees WHERE MOD(employee_id,2)!=0;

// 名字不是以M开头的
SELECT employee_id, salary bonus FROM Employees WHERE Employees.name NOT LIKE("M%");
SELECT employee_id, salary bonus FROM Employees WHERE LEFT(NAME,1)!= 'M';

同时这里要给奖金,奖金的规则是如果满足上述条件则给工资的100%,否则为0,这里要多重判断

SELECT employee_id,
(CASE WHEN MOD(employee_id,2)!=0 AND LEFT(NAME,1)!='M' THEN salary
     WHEN MOD(employee_id,2)=0 OR LEFT(NAME,1)='M' THEN 0
END) bonus
FROM Employees
ORDER BY employee_id

三、测试结果

测试结果显示

image.png

四、总结

case when then end该语句使用与一个条件判断有多种值得情况下分别执行不同的操作

CASE  <单值表达式>

       WHEN <表达式值> THEN <SQL语句或者返回值>

       WHEN <表达式值> THEN <SQL语句或者返回值>

       ...

       WHEN <表达式值> THEN <SQL语句或者返回值>

       ELSE <SQL语句或者返回值>

 END