题目描述

有一个订单信息表(order_info),有一个客户端表(client),
请你写出一个sql语句查询在2025-10-15以后,同一个用户下单2个以及2个以上状态为购买成功的C++课程或Java课程或Python课程的订单id,
是否拼团以及客户端名字信息,最后一列如果是非拼团订单,则显示对应客户端名字,如果是拼团订单,则显示NULL,并且按照order_info的id升序排序

思路

窗口函数和之前一样的
使用 left join 解决,以 order_info, t2 连接后的表为主表,左连接 client 表即可解决,或者使用 case when xxx then end 的方法

 case
     when o.is_group_buy = 'No' then c.name
     else NULL
 end

代码

select
    o.id,
    o.is_group_buy,
    case
        when o.is_group_buy = 'No' then c.name
        else NULL
    end
from
    order_info o
    left join client c on o.client_id = c.id
where
    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(id) > 1
    )
    and o.product_name in ('C++', 'Java', 'Python')
    and o.status = 'completed'
    and o.date >= '2025-10-15'