SQL每日一题 牛客17 10月的新客户单价和获客成本
试题链接10月的新户客单价和获客成本_牛客题霸_牛客网
分析排行榜第一名的解法
用窗口函数与join连接两个表格来做(要把大象装冰箱,拢共分五步)
- 第一步:用rank()over()窗口函数按照时间排序找到rank序号为的即为新用户
rank() over(partition by uid order by event_time) as order_rank from tb_order_overall
- 第二步:找出订单总金额,order_id,筛选条件为1.2021年10月 2.首次出现的用户(注意每个子表必须有自己的名字,不然会报错SQL_ERROR_INFO: 'Every derived table must have its own alias')
SELECTuid,order_id,total_amountFROM (SELECT*,RANK()OVER(PARTITION BY uid ORDER BY event_time) AS order_rankFROM tb_order_overall) AS t1WHEREorder_rank = 1ANDDATE_FORMAT(event_time, '%Y%m') = 202110
- 第三步:找到每个订单的商品总金额
SELECTorder_id,SUM(price * cnt) AS firstly_amountFROM tb_order_detailGROUP BY order_id
- 第四步:用join on 链接两个表,条件为订单号相等(个人觉得这步是我解题没有想到的点)
SELECTuid,order_id,total_amountFROM (SELECT*,RANK()OVER(PARTITION BY uid ORDER BY event_time) AS order_rankFROM tb_order_overall) AS t1WHEREorder_rank = 1ANDDATE_FORMAT(event_time, '%Y%m') = 202110) AS t2
JOIN(SELECTorder_id,SUM(price * cnt) AS firstly_amountFROM tb_order_detailGROUP BY order_id) AS t3
ON t2.order_id = t3.order_id;
- 第五步:计算首单客单价=订单总金额/订单总数,平均获客成本=优惠总金额/订单总数=总(商品金额-订单金额)/订单总数
SELECTROUND(SUM(total_amount) / COUNT(uid), 1) AS avg_amount,ROUND(SUM(firstly_amount - total_amount) / COUNT(uid), 1) AS avg_cost
FROM(SELECTuid,order_id,total_amountFROM (SELECT*,RANK()OVER(PARTITION BY uid ORDER BY event_time) AS order_rankFROM tb_order_overall) AS t1WHEREorder_rank = 1ANDDATE_FORMAT(event_time, '%Y%m') = 202110) AS t2
JOIN(SELECTorder_id,SUM(price * cnt) AS firstly_amountFROM tb_order_detailGROUP BY order_id) AS t3
ON t2.order_id = t3.order_id;
完成啦~~~~~~
此处放一个我自己做的过程中出现的问题
select
round(sum(total_amount)/count(*),1),round(sum(pc-total_amount)/count(*),1)
from
(select
uid,order_id,total_amount
from
(select*,
rank() over(partition by uid order by event_time) ran
from tb_order_overall
where date_format(event_time,"%Y%m")=202110) t1
where ran=1) t2
join
(select order_id,sum(price*cnt) pc
from tb_order_detail
group by order_id) t3
on t2.order_id=t3.order_id
看出来我错在哪里了。反正我是找了好一会!
就是把时间筛选在排序的那个表了,这样出现的错误就是排名第一的用户是从十月份以来第一次出现的用户而不是10月份才出现的新用户啦,只能说,菜鸟好好坚持。。。
SQL每日一题 牛客17 10月的新客户单价和获客成本相关推荐
- dom更新到底在javascript事件循环的哪个阶段?「前端每日一题v22.11.17」
dom更新到底在javascript事件循环的哪个阶段?「前端每日一题v22.11.17」 昨天写了一篇文章,是javascript的事件循环机制,然后在某乎上也发了,在发的时候看到了一个问题,dom ...
- SQL每日一题(20201218)来查找与之前(昨天的)日期相比温度更高的所有日期
SQL每日一题(20210602) SQL每日一题(20220111) SQL每日一题(20220613) SQL每日一题(20220722) select * from T1218 a inner ...
- SQL每日一题(20201030)QTY表示发货数量,MIN_QTY表示最小发货量
SQL每日一题(20211222) SQL每日一题(20220517) /** 此题涉及到递归,先用oracle的方法来解决 1.先用ceil函数来得到需要几次 比如celi(170/100) 需要2 ...
- SQL每日一题(20210824)假设计算日期是从2021-7-13开始计算,PENDING_DAYS表示到货还需要的天数
SQL每日一题(20211215) SQL每日一题(20220510) select a.item, a.qty, case when a.qty<=b.qty then '在途' else ' ...
- 2015年10月5日 正式启用该博客
2015年10月5日 正式启用该博客 转载于:https://www.cnblogs.com/tyks/p/4855877.html
- 牛客网 SQL17 10月的新户客单价和获客成本
描述 商品信息表tb_product_info id product_id shop_id tag int_ quantity release_time 1 8001 901 日用 60 1000 2 ...
- 02384计算机原理2019真题,全国2002年10月自考02384计算机原理试卷
全国2002年10月高等教育自学考试 计算机原理试题 课程代码:02384 第一部分 选择题 一.单项选择题(本大题共25小题,每小题1分,共25分)在每小题列出的四个选项中只有一个选项是符合题目要求 ...
- 03137计算机网络原理真题,全国2003年10月自考计算机网络基本原理试题 (清晰word版) - 自考历年真题 - 91考试网...
全国2003年10月高等教育自学考试计算机网络基本原理试题 课程代码:03137 一.单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内.每小题1分,共20分) ...
- 【每日微信新闻早报简报】10月11日 星期五
[今日新闻早报] 10月11日 星期五 农历九月十三 1.11日零时起,全国铁路实施新的列车运行图,增开旅客列车160列: 2.2019胡润百富榜:马云家族第三次成为中国首富,马化腾以 ...
最新文章
- 深入浅出:Linux设备驱动之字符设备驱动
- php7比php5垃圾回收,PHP5和PHP7的垃圾回收机制有什么不同
- 【python】python 中的三元表达式(三目运算符)
- SharePoint关于publish page, WiKi page, Web part page区别
- Bootstrap媒体对象列表
- java的数组(一维)
- bzoj 1951 [Sdoi2010]古代猪文 ——数学综合
- 利用深度学习识别番茄早期植株中的塔图绝对菌
- idea 设置内存_IntelliJ IDEA修改内存使得变得流畅
- pause 和 title
- 切片器可以设置日期格式?_如何分秒必争--浅淡时间切片器
- 超强指南!1分钟学会给电脑磁盘分区!
- IDEA社区版tomcat配置
- 通过短信网关发送Wappush消息
- linux命令之----sort命令用于将文本文件内容加以排序
- H3C设备链路聚合(LACP/PAGP)
- 解密LED显示屏的价格标准,全彩显示屏每平方米的价格范围
- VMware 15 出现的EFI VMware Virtual SCSI Hard Drive(0,0) …. unsuccessful、Directory “EZBOOT“ not found问题
- pandas 中对axis=0,axis=1的理解,对应pandas中drop的用法
- matlab算法模型——图的最短路径和距离