题解 | #牛客的课程订单分析(七)#
牛客的课程订单分析(七)
http://www.nowcoder.com/practice/d6f4a37f966145da8900ba9edcc4c068
明确问题:
第一列是显示的是客户端名字,如果是拼团订单则显示GroupBuy,
第二列显示这个客户端(或者是拼团订单)有多少订单,最后结果按照第一列(source)升序排序
第一步首先把题目中的条件限定好
from order_info
where date>'2025-10-15'
and status='completed'
and product_name in('C++','Java','Python')
第二步 使用count(*)over窗口函数把表按个数区分
count(*)over(partition by user_id )
第三步把条件和client表连接起来
from
(select id
,client_id
,user_id
,count(*)over(partition by user_id ) as ct
from order_info
where date>'2025-10-15'
and status='completed'
and product_name in('C++','Java','Python'))as a
left join client as b
on a.client_id=b.id
where a.ct>=2
所以可以使用case when 语句进行条件判断
case when a.client_id=0 then'GroupBuy' else b.name end
然后计算每个分类的个数就是最终结果了
select case when a.client_id=0 then'GroupBuy' else b.name end as source,count() from (select id ,client_id ,user_id ,count()over(partition by user_id ) as ct from order_info where date>'2025-10-15' and status='completed' and product_name in('C++','Java','Python'))as a left join client as b on a.client_id=b.id where a.ct>=2 group by case when a.client_id=0 then'GroupBuy' else b.name end order by 1