12.10sql刷题知识总结二

1.

请你写出一个sql语句查询在2025-10-15以后,同一个用户下单2个以及2个以上状态为购买成功的C++课程或Java课程或Python课程的来源信息,第一列是显示的是客户端名字,如果是拼团订单则显示GroupBuy,第二列显示这个客户端(或者是拼团订单)有多少订单,最后结果按照第一列(source)升序排序

select case when o.is_group_buy='Yes' then 'GroupBuy' else c.name end as source
,count(*) as cnt
from order_info o left join client c
on o.client_id=c.id
where o.user_id IN
(select user_id from order_info 
 where date >'2025-10-15'
and product_name in ('C++','Java','Python')
and status = 'completed'
 group by user_id having count(id)>1
)
and date >'2025-10-15'
and product_name in ('C++','Java','Python')
and status = 'completed'
group by source 
order by source

条件限定是死的,
where date >‘2025-10-15’
and product_name in (‘C++’,‘Java’,‘Python’)
and status = ‘completed’
所以不用过多考虑,子查询 having count(id)>1来判断订单数量,
另外需要注意使用左连接,如果是内联,将使得GroupBuy的订单信息消失,这里使用左连接后使用case when判断客服端显示名字。

2.

在这里插入图片描述
请你写出一个sql语句查询在2025-10-15以后,同一个用户下单2个以及2个以上状态为购买成功的C++课程或Java课程或Python课程的来源信息,第一列是显示的是客户端名字,如果是拼团订单则显示GroupBuy,第二列显示这个客户端(或者是拼团订单)有多少订单,最后结果按照第一列(source)升序排序

select grade from 
(SELECT grade,(select sum(number) from class_grade) as total,
  sum(number) over (order by grade) a,sum(number) over (order by grade desc) b
  from class_grade )t1
where a>=total/2 and b>=total/2
order by grade

中位数的概念,前序和后序都大于等于总数即为中位值,因此本题只需要使用开窗函数,改变排序方式即可求出前后序。

3.

在这里插入图片描述

请你写一个SQL查找积分增加最高的用户的id(可能有多个),名字,以及他的总积分是多少,查询结果按照id升序排序

select user.id,user.name,t.grade_sum from 
(select user_id,sum(grade_num) as grade_sum from grade_info group by user_id
having grade_sum=(select sum(grade_num) as grade_sum from grade_info
      group by user_id
      order by grade_sum desc limit 1 )
)t
join user on 
user.id=t.user_id
order by user.id

由于积分增加最高的用户的id可能有多个,故需要查出最高的积分,然后根据最高积分查出对应的用户信息

4.网易笔试真题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

请你编写一个SQL,查询向user_id = 1 的用户,推荐其关注的人喜欢的音乐。
不要推荐该用户已经喜欢的音乐,并且按music的id升序排列。你返回的结果中不应当包含重复项

select music.music_name from 
(select distinct music_id from music_likes where user_id in
(select follower_id from follow where user_id=1)
and music_id not in (select music_id from music_likes where user_id=1)
)t
inner join music on music.id=t.music_id
order by music.id

先找出user_id为1的用户关注的所有用户,然后查出关注用户喜欢的所有歌曲,使用distinct music_id来去重,与此同时,还要排除user_id为1的用户喜欢的歌曲id,最后要通过联查查出音乐名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值