LeetCode:mysql简单题刷题笔记-2

  1. 游戏玩法分析 I
    在这里插入图片描述在这里插入图片描述
    思路:使用group by对play_id进行分组(理解为分为了多张表,每个玩家就有一张表),然后查询每组中最小的日期,使用分组函数:min()
# Write your MySQL query statement below
select player_id,min(event_date) as first_login from Activity group by player_id;
  1. 订单最多的客户
    在这里插入图片描述
# Write your MySQL query statement below
select customer_number
from Orders
group by customer_number
order by count(customer_number) desc #执行优先级:group by比order by先,所以会先分组再降序排序
limit 1; #题目说恰好有一个客户比任何其他客户下了更多的订单,所以返回一条结果就可以
  1. 寻找用户推荐人
    在这里插入图片描述
    一开始想的很简单,直接写的下面这个
# Write your MySQL query statement below
select name from customer where referee_id != 2

结果只返回了一个
在这里插入图片描述
发现NULL的都没过滤出,然后又写了个

select name from customer where referee_id != 2 or referee_id = NULL;

结果还是一样,看了下官方题解,NULL不能直接用=,要换成is,果然是基础不牢。。。

select name from customer where referee_id != 2 or referee_id is NULL;
  1. 第二高的薪水
    在这里插入图片描述
select ifnull(
    (select distinct salary from Employee order by salary desc 
    limit 1 offset 1),NULL) as SecondHighestSalary;
    
    # 加distinct是为了去重,以防第一第二的工资相同,而导致查询结果有问题

必须加distinct,为了去重,以防第一第二的工资相同,而导致查询结果有问题

ifnull(a,b)函数解释:
如果查询的结果存在,结果返回a
如果查询的结果不存在,结果返回b

  1. 删除重复的电子邮箱
    在这里插入图片描述在这里插入图片描述
    一开始脑子没转过来,P1.id<P2.id这个写成了P1.id<>P2.id,直接把重复的删掉了,一个不剩~
delete P2 from Person as P1,Person as P2 where P2.email=P1.email and P1.id<P2.id;
# delete P2表示删除P2表中满足Where条件的记录
  1. 合作过至少三次的演员和导演
    写一条SQL查询语句获取合作过至少三次的演员和导演的 id 对 (actor_id, director_id)
    在这里插入图片描述
select actor_id,director_id from ActorDirector group by actor_id,director_id having count(*)>=3;

group by actor_id,director_id可以把actor_id,director_id看成一个整体,以他们的整体来进行分组

  1. 销售员
select name 
from salesPerson 
where sales_id not in (select sales_id from Company,Orders where Company.com_id=Orders.com_id and Company.name = 'RED')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值