力扣SQL专项----SQL入门第二天

本文题目全部来自力扣,点击题目标题可跳转到力扣相应题目下

第二天 排序&修改

基础知识

  1. 排序:排序使用的句子是ORDERR BY [排序的依据字段] 可以使用ASC(升序)和DESC(降序)来确定排序的顺序
  2. 修改:修改含有两种,一种是更新另外一种是删除
    1. 更新:语句是update 表名 set 要修改的字段名=要修改成的数据 where 定位字段名=相应数据
    2. 修改:语句是delete from 表名 where 选定的字段名称=你要删除的字段相应信息

力扣第二天的专项练习总共有三题,就包含了上述知识点,当然还包含了一些判断语句的使用(IF CASE)甚至难点可能是在这些上面。

1873.计算特殊奖金

题目描述
Employees表结构

+-------------+---------+
| 列名        | 类型     |
+-------------+---------+
| employee_id | int     |
| name        | varchar |
| salary      | int     |
+-------------+---------+
employee_id 是这个表的主键。
此表的每一行给出了雇员id ,名字和薪水。

写出一个SQL 查询语句,计算每个雇员的奖金。如果一个雇员的id是奇数并且他的名字不是以’M’开头,那么他的奖金是他工资的100%,否则奖金为0
返回的结果集请按照employee_id排序。

题目解析
这题是排序题,在最后很明确说按照employee_id来排序,所以在SQL语句的最后一句是ORDER BY employee_id
而本题主要要计算的是他们的奖金,根据上面的条件我们我们可以得到employee_id % 2 = 1 AND name not like "M%"的人奖金为自己原来的薪水,不然的话就是0
写成SQL语句如下

case
    when employee_id%2=1 and name not like "M%" then salary
    else 0
end 

而上述条件会是奖金bonus 的值
所以完整代码是

select employee_id,
case
    when employee_id%2=1 and name not like "M%" then salary
    else 0
end bonus
from Employees
order by employee_id;

627.变更性别

题目描述
Salary表结构:

+-------------+----------+
| Column Name | Type     |
+-------------+----------+
| id          | int      |
| name        | varchar  |
| sex         | ENUM     |
| salary      | int      |
+-------------+----------+
id 是这个表的主键。
sex 这一列的值是 ENUM 类型,只能从 ('m', 'f') 中取。
本表包含公司雇员的信息。

请你编写一个 SQL 查询来交换所有的 fm (即,将所有 f 变为 m ,反之亦然),仅使用 单个 update 语句 ,且不产生中间临时表。
注意,你必须仅使用一条 update 语句,且 不能 使用 select 语句。
题目解析
如果可以使用SELECT那就可以挑选出来,然后修改再合并,显然这和题目要求不一样。
这题我们基本的语句就是UPSATE Salary SET sex = ???
问号中应该填写什么,才能让我们的性别互换?和上面一样,一个条件判断语句就可以了
所以我们的答案是

UPDATE salary
SET sex = CASE sex
        WHEN 'm' THEN 'f'
        ELSE 'm'
    END;

196.删除重复的电子邮箱

题目描述
Person表结构:

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| email       | varchar |
+-------------+---------+
id是该表的主键列。
该表的每一行包含一封电子邮件。电子邮件将不包含大写字母。

编写一个 SQL 删除语句来 删除 所有重复的电子邮件,只保留一个id最小的唯一电子邮件。
以 任意顺序 返回结果表。 (注意: 仅需要写删除语句,将自动对剩余结果进行查询)
题目解析
删除的条件是Email相同的且id靠后的,
那我们可以使用这个表来创建两个表,两个表是一样的p1 p2
答案如下

DELETE p1 FROM Person p1,
    Person p2
WHERE
    p1.Email = p2.Email AND p1.Id > p2.Id
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值