【场景】:新用户首次行为

【分类】:聚合函数、子查询

分析思路

难点:

1.获取新用户首单的信息。使用in子查询

(1)统计每个订单的商品总金额

  • [使用]:sum() group by

(2)计算2021年10月商城里所有新用户的首单平均交易金额(客单价)和平均获客成本(保留一位小数)

**连续的表示:**日期减去排序的值相等;

  • [条件]:2021年10月;新用户首单

  • [使用]:(uid,event_time) in( )

最终结果

select 查询结果 [平均交易金额;平均获客成本]
from 从哪张表中查询数据[多表]
where 查询条件 [2021年10月;已付款:新用户首单]

求解代码

方法一:

with子句

with
    main as(
        #统计每个订单的商品总金额
        select
            order_id,
            sum(price*cnt) as uid_cost
        from tb_order_detail
        group by order_id
    )

#计算2021年10月商城里所有新用户的首单平均交易金额(客单价)和平均获客成本(保留一位小数)
select
    round(avg(total_amount),1) as avg_amount,
    round(avg(uid_cost-total_amount),1) as avg_cost
from tb_order_overall
join main using(order_id)
where date_format(event_time,'%Y%m') = '202110'
and status = 1
and (uid,event_time) in(
    select
        uid,
        min(event_time) as event_time
    from tb_order_overall
    group by uid
)

方法二

多表嵌套

#计算2021年10月商城里所有新用户的首单平均交易金额(客单价)和平均获客成本(保留一位小数)
select
    round(avg(total_amount),1) as avg_amount,
    round(avg(uid_cost-total_amount),1) as avg_cost
from tb_order_overall
join(
    #统计每个订单的商品总金额
    select
        order_id,
        sum(price*cnt) as uid_cost
    from tb_order_detail
    group by order_id
) main using(order_id)
where date_format(event_time,'%Y%m') = '202110'
and status = 1
and (uid,event_time) in(
    select
        uid,
        min(event_time) as event_time
    from tb_order_overall
    group by uid
)