思路: ①选出10月新用户,再选出新用户对应的首单数据; ②计算每个首单对应的订单总金额、商品总金额,最后计算。 步骤: ①选出10月新用户的首单数据:用窗口函数min选出最早下单时间,然后做筛选:下单时间=最早下单时间,且最早下单时间在2021年10月即可,形成表tb1。 ②用tb1左连接tb_order_detail,形成只有首单对应的订单明细表,再根据单号order_id分组计算每单对应的订单总金额、商品总金额、下单人数。(注意,订单总金额total_amount在做表连接时就已存在,每行都一样,所以在聚类计算时要加一个聚类函数即可,avg\min\max均可) ③最后再用一次聚合函数,将所有订单的数据聚合一次,进行计算。 with first_order_id as( select order_id, uid, total_amount from( select *, min(event_time)over(partition by uid) as min_e_t from tb_order_overall) as tb1 where event_time=min_e_t and date_format(min_e_t,'%Y%m')='202110') select round(sum(total_b)/sum(uid_num),1) avg_amount, round((sum(total_a)-sum(total_b))/sum(uid_num),1) avg_cost from( select sum(price*cnt) total_a, count(distinct uid) uid_num, max(total_amount) total_b from first_order_id left join tb_order_detail using(order_id) group by order_id) as tb2