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

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

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

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

注:订单的优惠金额 = 订单明细里的{该订单各商品单价×数量之和} - 订单总表里的{订单总金额} 。

1.题目要求的指标与第一个表无关,因此我们只需要后面两个表即可完成计算。

由于要求新用户的的指标,我们先选出新用户

select * from 
(select *,rank()over(partition by uid order by event_time ) as rk  
from tb_order_overall ) as u 
where rk=1 and left(event_time,7)='2021-10'

将上述结果作为表t, 结果如下:

alt

2.将表t和第三个表tb_order_detail连接完成我们的计算即可。 先求出total_amount,以及每个order_id的订单明细里的总和:

select t.order_id,total_amount,
sum(price*cnt) as pc
from t join tb_order_detail as c on t.order_id=c.order_id
group by t.order_id,total_amount

结果如下

alt

剩下的按题意进行计算即可。完整代码如下

with t as 
(select * from 
(select *,rank()over(partition by uid order by event_time ) as rk  
from tb_order_overall ) as u 
where rk=1 and left(event_time,7)='2021-10')


select round(avg(total_amount),1) as avg_a,
round(avg(pc-total_amount),1) as avg_c from 
(select t.order_id,total_amount,
sum(price*cnt) as pc
from t join tb_order_detail as c on t.order_id=c.order_id
group by t.order_id,total_amount) as u 
全部评论
仔细想了一下,题目中要求的是新用户首单,如果使用窗口函数解决该题可以确定是首单,但是不是新用户就另说了,个人愚见,如果有误欢迎指正。而前面的题解用min()函数是可以达到题目要求的。
1 回复 分享
发布于 2023-04-13 23:19 河南
我觉得不够严谨吧,就是获客成本那一块。他这里只计算了优惠
点赞 回复 分享
发布于 2024-08-23 11:30 山西
请问为什么还要group by total_amount 呢?
点赞 回复 分享
发布于 2024-06-10 22:24 吉林
这个答案好
点赞 回复 分享
发布于 2022-11-29 14:45 上海
该牛油正在参与牛客写题解薅羊毛的活动,牛币,周边,京东卡超多奖品放送,活动进入倒计时!快来捡漏啦https://www.nowcoder.com/discuss/888949?source_id=profile_create_nctrack&channel=-1
点赞 回复 分享
发布于 2022-04-20 17:16

相关推荐

下北澤大天使:你是我见过最美的牛客女孩😍
点赞 评论 收藏
分享
评论
27
3
分享

创作者周榜

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