学习计划:「SQL」 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台
第一题:
题目:
表: 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排序。
代码:
select employee_id,
case when (name not like 'M%' and employee_id %2 = 1) then salary else 0 end as bonus
from employees
order by employee_id
知识点: case when then 结构
类似于switch case结构,有两种用法
用法一:简单case函数
select
case sex
when '1' then '男'
else then '女' end
from tb_sex
用法二:case搜索函数
update db_bonus
set bonus =
case
when salary > 200 then salary * 0.5
when salary > 300 then salary * 1
else 0 end
第三题
题目:
表: Person
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| id | int |
| email | varchar |
+-------------+---------+
id是该表的主键列。
该表的每一行包含一封电子邮件。电子邮件将不包含大写字母。
编写一个 SQL 删除语句来 删除 所有重复的电子邮件,只保留一个id最小的唯一电子邮件。
以 任意顺序 返回结果表。 (注意: 仅需要写删除语句,将自动对剩余结果进行查询)
答案:
delete p1 from Person p1 , Person p2
where p1.email = p2.email and p1.id > p2.id
将person表与自己建立连接,每次都从p1表中获取一条数据与第二表的所有数据进行比较,如果email重复,并且p1的id对于p2的id则删除(只保留id最小的)