题解 | #店铺901国庆期间的7日动销率和滞销率#(感觉是自己做得最窝囊的一次)

店铺901国庆期间的7日动销率和滞销率

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

这题反复折腾了挺长时间的,看了好多个题解,发现都没有和自己的想法一致的,但是在看的过程中,自己又有了思路,最后照着这种崎岖的思路写了下来,没想到还真的给过了,但是觉得这种解法实在是难登大雅之堂。或者说和我之前写过的SQL相比,这有点像是投机取巧。

#  动效率  = 有销量的商品/已上架总商品数
#  滞销率  = 没有销量的商品/已上架总商品数      
#  两者恰好互补 

#  统计出9.25--10.03 这九天的数据 近七天901店铺的 所有商品,有销售的就打个记号
with t1 as (
select tpi.product_id,
       tpi.shop_id,
       date_format(too.event_time,'%Y-%m-%d') as dt
from tb_order_overall too
join tb_order_detail tod using(order_id)
join tb_product_info tpi on tod.product_id = tpi.product_id
having dt >= '2021-09-25' and dt <='2021-10-03'
order by dt
),

t2 as( 
select distinct dt as dtt,
      (select count(distinct product_id) as dx
       from t1
       where timestampdiff(day,dt,'2021-10-01') <= 6 and timestampdiff(day,dt,'2021-10-01') >= 0 and shop_id = 901) as maichu
from t1
where dt = '2021-10-01' 

union all

select distinct dt as dtt,
      (select count(distinct product_id) as dx
       from t1
       where timestampdiff(day,dt,'2021-10-02') <= 6 and timestampdiff(day,dt,'2021-10-02') >= 0 and shop_id = 901) as maichu
from t1
where dt = '2021-10-02'

union all 

select distinct dt as dtt,
      (select count(distinct product_id) as dx
       from t1
       where timestampdiff(day,dt,'2021-10-03') <= 6 and timestampdiff(day,dt,'2021-10-03') >= 0 and shop_id = 901) as maichu
from t1
where dt = '2021-10-03')




select t2.dtt as dt,
       round(maichu/(select count(product_id) from tb_product_info tpi where shop_id = 901), 3) as sale_rate,
       (1 - round(maichu/(select count(product_id) from tb_product_info tpi where shop_id = 901), 3)) as unsale_rate
from t2
order by dt


# select dt,
#        max(dt) over (partition by dt order by dt rows 6 preceding) as maichu
# from t1










我先照着我的这个通过的代码的思路讲一下,然后再讲自己之前没能通过的思路。(代码块里面有一些#是我写给自己看的注释)

第一个t1表是:找出有售卖记录的商品的id,以及时间,shop_id是为了后续筛选店铺用的。(即考虑只要当天任一店铺有任何商品的销量就输出该天的结果,即使店铺901当天的动销率为0这一情况。)
t2就是直接找10月1号,2号,3号对应店铺累计七天销量,dtt是时间,maichu是销量。我觉得这样做很傻,有点像小学生拿笔去一天一天的对应表格去数数据,不像之前做窗口函数,可以直接做一个滑动窗口一串代码,就可以把七天的数据都统计出来了。(但是我也暂时只会这种的办法了。。。。还是看了题解之后的。。。。。。)因为只需要统计三天的数据,所以连续复制粘贴两次就可以搞定了。
有了这两个表之后,后续就比较简单了,只需要简单的找出数据再运算一下就可以了。还有就是如何判断商品是否下架题目没有给出明确的定义,所以我再统计901店铺有多少在售商品的时候,没有写得更完整一些。

再来谈谈我一开始的思路

我一开始是想通过先做出t1表,然后再直接写个滑动窗口,就能做出类似于t2 那样的表,但是我发现无论我怎样写滑动窗口都会出现这样的结果↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ alt 包括我使用sum(if()) 来整合窗口函数,也会出现相同的结果,就是某个日期会出现两次,并且我统计一周前的有销售记录的商品也没有想出比较好的方法去统计,最后只能用比较极端的方法去解。

我在写通过的方法时也犯有一些错误

  1. 一开始没有想到限制店铺901的问题
  2. 其次也忘记了如果有别的店铺当天有销售记录也是要输出动销率和滞销率的,这个在写到后面的时候也给忘记了。
全部评论

相关推荐

时间线:&nbsp;1.4-1.5:&nbsp;boss&nbsp;牛客&nbsp;官网&nbsp;实习僧海投了两天,&nbsp;感觉确实没啥招人的啊,&nbsp;心里凉了一半.1.6:&nbsp;中午快手约面,&nbsp;下午字节hr飞书私聊约面,&nbsp;当时想着第一次面大厂感觉三个过一个一面就已经赢了.1.7:&nbsp;下午&nbsp;3点大厂处女面,&nbsp;哈哈面试官是重邮红岩的直接保送;&nbsp;5点快手一面,&nbsp;我说这个是我的第二次大厂面试,&nbsp;面试官问要是拿到字节和快手选择哪个,&nbsp;我说昨天看了一晚上快手百分百选快手哈哈哈.&nbsp;晚上5.30字节约二面,&nbsp;快手约二面,&nbsp;小红书约一面.1.8:&nbsp;下午2点快手二面,&nbsp;聊天面体验非常好(当天电话确认入职时间);&nbsp;4点字节二面这次不是校友了,&nbsp;然后有一个CSS实现switch效果的忘记属性咋写了,&nbsp;感觉危了;&nbsp;7.30&nbsp;问字节hr是不是挂了;&nbsp;9点开始小红书一面,&nbsp;难死我了,&nbsp;但我还是笑着面完了,&nbsp;然后卸载了小红书,&nbsp;但是过了一会会小红书hr约二面,&nbsp;遂下回来了字节约三面.1.9:&nbsp;下午2点字节三面,&nbsp;依旧聊天+算法,&nbsp;自己太菜了有一个写错了,&nbsp;面完感觉又危了;&nbsp;5点面小红书20min结束(offer审批);5.30又去问字节hr是不是挂了,&nbsp;hr小姐姐说干嘛用一个句式,&nbsp;我说手写题又又又没写出来😂,&nbsp;2min后约hr面;8.30&nbsp;快手offer总结,&nbsp;自己运气好遇到了好公司好部门好面试官,&nbsp;字节剪映&nbsp;快手电商&nbsp;小红书支付的面试体验都非常好,&nbsp;不会的题会带你一步一步思考,&nbsp;流程也非常快全部都是当天推进,&nbsp;小红书是以分钟为单位推进.&nbsp;&nbsp;面经以及细节等我慢慢整理,&nbsp;&nbsp;以及保佑所有的审批不要出问题,&nbsp;我是真怕最后全过了0offer😂bg:&nbsp;重邮&nbsp;大数据&nbsp;蓝山工作室&nbsp;一段非大厂实习
独角仙梦境:这是真👻了
找实习记录
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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