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

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

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

select round(sum(total_amount)/count(distinct uid),1),
round(sum(discount)/count(distinct uid),1) from (
select order_id, uid, total_amount, before_price-total_amount discount
from tb_order_overall left join (
select order_id, sum(price*cnt) before_price
from tb_order_detail
group by order_id)t1 using(order_id)
where date_format(event_time,'%Y-%m') = '2021-10'
and (uid, event_time) in (select uid, min(event_time)
from tb_order_overall
group by uid)

select round(sum(total_amount)/count(distinct uid),1),
round(sum(discount)/count(distinct uid),1) from (
select order_id, uid, total_amount, before_price-total_amount discount
from tb_order_overall left join (
select order_id, sum(price*cnt) before_price
from tb_order_detail
group by order_id)t1 using(order_id)
where (uid, event_time) in (select uid, min(event_time)
             from tb_order_overall
             where date_format(event_time,'%Y-%m') = '2021-10'
             group by uid)

第一段是正确的,第二段是错误的,区别在于正确的代码将日期的挑选放在了in语句的外面,这样可以保证我们挑选的uid就是在十月份购买的顾客,如果将日期筛选条件放在in语句里面而不在大条件下进行日期筛选的话,就容易将九月份的购买额也算进去,因为in语句只是对uid的一个选择,例如:
uid event_time total_amount
101 2021-9-30 50
101 2021-10-1 30
102 2021-10-8 20


错误的代码运行结果(对uid选择时才对日期筛选):

uid sum(total_amount)
101 80
102 20
正确代码运行结果(在加和时就对日期进行了筛选):
uid sum(total_amount)
101 50
102 20

所以说,我那个错误的代码会使结果变大









全部评论

相关推荐

Twilight_m...:经典我朋友XXXX起手,这是那种经典的不知道目前行情搁那儿胡编乱造瞎指导的中年人,不用理这种**
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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