1873. 计算特殊奖金
🚀 表: 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。 其他的雇员得到了百分之百的奖金。 🐴🐴 答案 # Write your MySQL query statement below select employee_id, case when mod(employee_id,2)=1 and LEFT(name,1)!='M' then salary else 0 end bonus from Employees order by employee_id /* Write your T-SQL query statement below */ select employee_id, case when employee_id%2=1 and SUBSTRING(name,1,1)!='M' then salary else 0 end bonus from Employees order by employee_id /* Write your PL/SQL query statement below */ select employee_id "employee_id", case when mod(employee_id,2)=1 and substr(name,1,1)!='M' then salary else 0 end "bonus" from Employees order by 1
627. 变更性别
🚀 Salary 表: +-------------+----------+ | Column Name | Type | +-------------+----------+ | id | int | | name | varchar | | sex | ENUM | | salary | int | +-------------+----------+ id 是这个表的主键。 sex 这一列的值是 ENUM 类型,只能从 ('m', 'f') 中取。 本表包含公司雇员的信息。 🚀 需求 请你编写一个 SQL 查询来交换所有的 'f' 和 'm' (即,将所有 'f' 变为 'm' ,反之亦然),仅使用 单个 update 语句 ,且不产生中间临时表。 注意,你必须仅使用一条 update 语句,且 不能 使用 select 语句。 查询结果如下例所示。 示例 1: 输入: Salary 表: +----+------+-----+--------+ | id | name | sex | salary | +----+------+-----+--------+ | 1 | A | m | 2500 | | 2 | B | f | 1500 | | 3 | C | m | 5500 | | 4 | D | f | 500 | +----+------+-----+--------+ 输出: +----+------+-----+--------+ | id | name | sex | salary | +----+------+-----+--------+ | 1 | A | f | 2500 | | 2 | B | m | 1500 | | 3 | C | f | 5500 | | 4 | D | m | 500 | +----+------+-----+--------+ 解释: (1, A) 和 (3, C) 从 'm' 变为 'f' 。 (2, B) 和 (4, D) 从 'f' 变为 'm' 。 🐴🐴 答案 # Write your MySQL query statement below update Salary set sex= case sex when 'm' then 'f' when 'f' then 'm' end /* Write your T-SQL query statement below */ update Salary set sex= case sex when 'm' then 'f' when 'f' then 'm' end /* Write your PL/SQL query statement below */ update Salary set sex=decode(sex,'m','f','f','m')
196. 删除重复的电子邮箱
🚀 表: Person +-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | email | varchar | +-------------+---------+ id是该表的主键列。 该表的每一行包含一封电子邮件。电子邮件将不包含大写字母。 🚀 需求 编写一个 SQL 删除语句来 删除 所有重复的电子邮件,只保留一个id最小的唯一电子邮件。 以任意顺序 返回结果表。 (注意: 仅需要写删除语句,将自动对剩余结果进行查询) 查询结果格式如下所示。 示例 1: 输入: Person 表: +----+------------------+ | id | email | +----+------------------+ | 1 | john@example.com | | 2 | bob@example.com | | 3 | john@example.com | +----+------------------+ 输出: +----+------------------+ | id | email | +----+------------------+ | 1 | john@example.com | | 2 | bob@example.com | +----+------------------+ 解释: john@example.com重复两次。我们保留最小的Id = 1。 🐴🐴 答案 # Please write a DELETE statement and DO NOT write a SELECT statement. # Write your MySQL query statement below DELETE p1 FROM Person p1, Person p2 WHERE p1.email = p2.email AND p1.id > p2.id /* Please write a DELETE statement and DO NOT write a SELECT statement. Write your T-SQL query statement below */ DELETE p1 FROM Person p1, Person p2 WHERE p1.email = p2.email AND p1.id > p2.id /* Please write a DELETE statement and DO NOT write a SELECT statement. Write your PL/SQL query statement below */ delete from Person where id in (select e1.id from Person e1,Person e2 where e1.email = e2.email and e1.id>e2.id) delete from Person e1 where exists (select 1 from Person e2 where e1.email = e2.email and e1.id>e2.id)