SQL学习笔记:Leetcode刷题 SQL入门

SQL学习笔记:Leetcode刷题

1873. 计算特殊奖金

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

  • 难点:

返回的列带筛选条件

`if ( 条件,若条件正确则返回,若条件错误则返回`)

判断奇偶

employee_id%2=1
--or
mod(id,2)  --=1 是指id是奇数, =0 是指id是偶数

627. 变更性别

编写一个 SQL 查询来交换所有的 ‘f’ 和 ‘m’ (即,将所有 ‘f’ 变为 ‘m’ ,反之亦然),仅使用 单个 update 语句 ,且不产生中间临时表。

  • 难点:

update语句

update 表名
set 列名 = 修改后的值

case when

case 列名
	when 1 then 2 #将1换为2
	when 2 then 3
	else 3
end

196. 删除重复的电子邮箱

编写一个 SQL 删除语句来 删除 所有重复的电子邮件,只保留一个id最小的唯一电子邮件。

  • 难点:

DELETE

将该表分为两份判断

DELETE p1.*
FROM Person as p1, Person as p2
WHERE p1.email = p2.email AND p1.id>p2.id

1667. 修复表中的名字

编写一个 SQL 查询来修复名字,使得只有第一个字符是大写的,其余都是小写的。

CONCAT

CONCAT(' A','B','C')

UPPER, LOWER

LEFT, SUBSTRING

LEFT('123456789',3) 返回左边3项
SUBSTRING('123456789',3) 从第3位开始返回

1484. 按日期分组销售产品

编写一个 SQL 查询来查找每个日期、销售的不同产品的数量及其名称。
每个日期的销售产品名称应按词典序排列。

COUNT 计数

DISTINCT 去重

GROUP CONCAT 多个拼接

连接group by的结果集时,可以指定自定义的分隔符,不指定的情况下,默认是 ‘,’

GROUP_CONCAT(DISTINCT product 
			 ORDER BY product ASC 
			 SEPARATOR ',')

解法

SELECT sell_date,
  COUNT(DISTINCT product) as num_sold,
  GROUP_CONCAT(DISTINCT product
                ORDER BY product ASC
                SEPARATOR ',') as products
FROM Activities
GROUP BY sell_date #需要将同一销售日期的并在一起
ORDER BY sell_date

1527. 患某种疾病的患者

写一条 SQL 语句,查询患有 I 类糖尿病的患者 ID (patient_id)、患者姓名(patient_name)以及其患有的所有疾病代码(conditions)。I 类糖尿病的代码总是包含前缀 DIAB1 。

近似查询

SELECT sell_date,
  COUNT(DISTINCT product) as num_sold,
  GROUP_CONCAT(DISTINCT product
                ORDER BY product ASC
                SEPARATOR ',') as products
FROM Activities
GROUP BY sell_date #需要将同一销售日期的并在一起
ORDER BY sell_date

1965. 丢失信息的雇员

写出一个查询语句,找到所有 丢失信息 的雇员id。当满足下面一个条件时,就被认为是雇员的信息丢失:
雇员的 姓名 丢失了,或者
雇员的 薪水信息 丢失了,

  • 思路 :
    将salary空白的join到Employees表

left join

A left join B on 关键key条件 WHERE 条件 #将B加到A中

union

1795. 每个产品在不同商店的价格

重构 Products 表,查询每个产品在不同商店的价格,使得输出的格式变为(product_id, store, price) 。如果这一产品在商店里没有出售,则不输出这一行。

SELECT product_id, 'store1' as store, store1 as price FROM Products WHERE store1 is not NULL
UNION 
SELECT product_id, 'store2' as store, store2 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值