题解 | #牛客的课程订单分析(六)#

牛客的课程订单分析(六)

http://www.nowcoder.com/practice/c5736983c322483e9f269dd23bdf2f6f

思路:本题的重点是通过是否是拼团订单来判断是否显示客户端名字

使用 left join 解决,以 order_info, t2 连接后的表为主表,左连接 client 表即可解决,或者使用 case when xxx then end 的方法

      case when is_group_buy = 'Yes' then 'None' -- 编译器必须要为None才识别为Null
      when is_group_buy='No' then name end client_name 

来枚举,最后解决显示客户端名字。

也可以使用 ifnull(c.name, 'None') 来替换。

完整代码 (不使用 case):

select t1.id, t1.is_group_buy, t3.`name` as client_name
from order_info t1 join (select user_id
                         from order_info
                         where status = 'completed'
                         and date > '2025-10-15'
                         and product_name in ('C++', 'Java', 'Python')
                         group by user_id
                         having count(user_id) > 1) as t2
						 on t1.user_id = t2.user_id
						 left join client t3
						 on t3.id = t1.client_id
where t1.status = 'completed'
and t1.date > '2025-10-15'
and t1.product_name in ('C++', 'Java', 'Python')
order by t1.id

完整代码 (使用 case):

select o.id, is_group_buy,
	case when is_group_buy = 'Yes' then 'None'
	when is_group_buy='No' then name end client_name 
from order_info o
left join client c 
on o.client_id = c.id
where date > '2025-10-15'
and status = 'completed'
and product_name IN ('C++','Java','Python')
and user_id IN
(
    select user_id
    from order_info
    where date > '2025-10-15'
    and status = 'completed'
    and product_name IN ('C++','Java','Python')
    group by user_id
    having count(status) >= 2
)
order by o.id
SQL练习 文章被收录于专栏

已完成牛客的SQL练习。接下来是算法的练习

全部评论

相关推荐

hso_:哈哈哈哈哈哈我没offer一样在同一道题开喷了
投递深圳同为数码等公司10个岗位
点赞 评论 收藏
分享
和蔼:在竞争中脱颖而出,厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务