# 先关联表 with t as( select d.order_id, product_id, price, cnt, uid, event_time, date(event_time) dt, total_amount, status from tb_order_detail d join tb_order_overall o on d.order_id = o.order_id ), # 确定新用户数量:根据用户分层,时间顺序,第一单时间在2021-10 里面,确定新用户的第一单 t2 as( select order_id,product_id, uid,dt, CASE WHEN ROW_NUMBER() OVER(PARTITION BY uid ORDER BY event_time) = 1 AND DATE_FORMAT(event_time, '%Y-%m') = '2021-10' -- 确保是10月的第一单 THEN 1 ELSE 0 end as if_first_order from t order by uid,event_time ), # 新用户第一单的交易金额:total_amount #订单明细里的{该订单各商品单价×数量之和} - 订单总表里的{订单总金额} 。 t3 as ( select distinct t.order_id, total_amount, sum(t.price * t.cnt) over (partition by order_id) - total_amount as cost from t join t2 on t.order_id = t2.order_id where if_first_order = 1 ) select round(avg(total_amount),1),round(avg(cost),1) from t3