题解 | #10月的新户客单价和获客成本#

10月的新户客单价和获客成本

https://www.nowcoder.com/practice/d15ee0798e884f829ae8bd27e10f0d64

# 请计算2021年10月商城里所有新用户的首单平均交易金额(客单价)和平均获客成本(保留一位小数)。
# 订单的优惠金额 = 订单明细里的{该订单各商品单价×数量之和} - 订单总表里的{订单总金额} 。
with t as (
    -- 首单

    select
            order_id
            ,total_amount
            ,event_time
    from
    (
    #     DATE_FORMAT(event_time,'%Y-%m')='2021-10' 为什么这个东西要放在外面筛选?
    #     解答:题目问的是2021年10月商城里所有新用户,若一个用户在9月为新订单,如果放在里面先筛选的话,这条9月的信息就会被筛选掉,那么就会默认10月份那个算最新的,反而会加入错误数据
    #     若题目问的是每个用户十月的第一个订单,那么就可以把DATE_FORMAT(event_time,'%Y-%m')='2021-10'放在里面
        select
            *
            ,dense_rank() over(partition by uid order by event_time) as rk
        from tb_order_overall
    ) tmp_table
    where DATE_FORMAT(event_time,'%Y-%m')='2021-10' and rk=1

),t2 as (
    select
        order_id,
        sum(price*cnt) as origin_pay -- 未优惠的原价
    from tb_order_detail
    group by order_id
),t3 as (
    select
        t.*,
        t2.origin_pay,
        (t2.origin_pay - t.total_amount) as discount_fee -- 优惠金额
    from t2 join t on t2.order_id=t.order_id
)
select
    round(sum(total_amount)/count(order_id),1) as avg_amount,
    round(sum(discount_fee)/count(*),1) as avg_cost
from t3
全部评论

相关推荐

评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务