拼多多学霸批数据分析第二批笔试题

本次笔试一共五个题,3道SQL,1个概率题,1个abtest

  1. 给一个表ord,包括user_id(用户id),goods_id(商品id),goods_num(购买商品数),ord_amt(购买金额),creat_time(购买时间)

求最近30天商品的平均价格

select goods_id as '商品id',sum(ord_amt)/sum(goods_num) as '近30天平均价格' from (select goods_id,sum(ord_amt),sum(goods_num) from ord) where datediff(convert(new(),date),convert(creat_time,date))<30 group by goods_id

2. 两个表:

pv_log(用户浏览记录表):pv_id(页面id),user_id(用户id),creat_time(访问时间)

dimuser(用户注册记录表):user_id(用户id),age(年龄),creat_time(注册时间)

统计浏览不同页面数的用户对应的平均年龄

--考虑了访问时间和注册时间的年龄间隔
select a.pv_id,AVG(a.newyear-b.birthyear)
from
(select pv_id,user_id,year(creat_time) as newyear 
from pv_log
group by ov_id,user_id,year(creat_time)
)a
left join 
(select user_id,(year(creat_time)-age) as birthyear
from dim_user
group by user_id
)b
on a.user_id = b.user_id;

3. 两张表

tbl_ordr(用户订单表):user_id(用户id), ordr_id(订单号), ordr_goods(订单商品id), ordr_time(预定时间)

tblclk(用户商品点击明细表):clk_id(点击id), user_id, clk_time(点击时间), clk_goods(点击的商品id,和ordr_goods对应)

用户点击商品之后的订单算是这次点击产生的订单;多次点击后产生的订单,算订单创建前最后一次点击产生的订单,求有订单商品的点击及订单号

--将订单表和点击商品明细表关联,找出下单商品所有的记录
with base0 as
(
select a.usr_id,a.ordr_id,a.ord_goods,b.clk_id,max(b.clk_time) over(partition by clk_goods)
from tbl_order a
left join tbl_clk b
on a.usr_id = b.usr_id and a.ord_goods = b.clk_goods
where b.clk_time < a.ordr_time
)
select clk_id,order_id from base0

4. 10个白球1个黑球,谁先取出黑球获胜,AB轮流取,取出后不放回,A先取,求A、B各自获胜概率

A第一次取出黑球的概率:1/11

A第二次取出黑球的概率:10/11*9/10*1/9=1/11

A第三次取出黑球的概率:10/11*9/10*8/9*7/8*1/7=1/11

A第四次取出黑球的概率:10/11*9/10*8/9*7/8*6/7*5/6*1/5=1/11

A第五次取出黑球的概率:10/11*9/10*8/9*7/8*6/7*5/6*4/5*3/4*1/3=1/11

A第六次取出黑球的概率:10/11*9/10*8/9*7/8*6/7*5/6*4/5*3/4*2/3*1/2*1=1/11

B第一次取出黑球的概率:10/11*1/10=1/11

B第二次取出黑球的概率:10/11*9/10*8/9*1/8=1/11

B第三次取出黑球的概率:10/11*9/10*8/9*7/8*6/7*1/6=1/11

B第四次取出黑球的概率:10/11*9/10*8/9*7/8*6/7*5/6*4/5*1/4=1/11

B第五次取出黑球的概率:10/11*9/10*8/9*7/8*6/7*5/6*4/5*3/4*2/3*1/2=1/11

所以,A取出黑球胜利的概率为6/11,B取出黑球胜利的概率为5/11

5. 发优惠券,一种满20减2,一种满30减3

1)不考虑券的成本,评判两种方案优劣

2)考虑券的成本评判

#拼多多##数据分析师##笔试题目##题解##秋招#
全部评论
sql题比第一批简单不少
1 回复 分享
发布于 2019-08-12 20:34
第一道题有必要加嵌套吗?可以直接调用的啊
点赞 回复 分享
发布于 2019-09-25 14:22
刚看了眼投递状态 已结束 代表凉了吗
点赞 回复 分享
发布于 2019-08-12 19:43
哈哈哈,我连笔试的机会都没有,直接结束了😁😁
点赞 回复 分享
发布于 2019-08-12 20:16
楼主,你的状态也是已结束是吗?
点赞 回复 分享
发布于 2019-08-12 21:29
你这笔试时间是什么时候?
点赞 回复 分享
发布于 2019-08-12 22:15
不懂为什么 感觉做的还行 已结束,,所以这个批次是压根不打算招人吧
点赞 回复 分享
发布于 2019-08-13 10:09
网申系统中“职位状态 已结束”仅代表学霸批岗位结束投递,正在笔试或面试进程中的同学会正常进行招聘流程~
点赞 回复 分享
发布于 2019-08-13 11:59
楼主,第二题你说的那个时间间隔我不是很明白呀……有空时能帮我解释一下吗? 我是这样写的: select nums,avg(age) as avg_age from (select user_id,count(distinct pv_id) as nums from pv_log group by user_id) a left join dim_user b on a.user_id=b.user_id group by nums
点赞 回复 分享
发布于 2019-08-16 10:26
您好,关于sql想表达我的几个想法 1. 第一题的new()是不是应该是now() 2. 第二题我的方法,您觉得对不对: WITH t1 AS (                         SELECT pv_id, p.user_id, (year(p.creat_time) - year(d.creat_time) + age) user_age                         FROM pv_log p                         LEFT JOIN                         ON p.user_id = d.user_id                      ) SELECT pv_id, AVG(user_age) avg_age FROM t1 GROUP BY pv_id 我没理解错的话,是不是把同一用户不同时间的访问也看做不同的个体去统计的? 还请多多指教,谢谢
点赞 回复 分享
发布于 2019-08-31 12:52
关于第sql第三题,partition by 后面是不是应该加一个user_id哇?
点赞 回复 分享
发布于 2019-08-31 13:35
楼主,最后一题怎么答比较好啊。不知道该怎么答
点赞 回复 分享
发布于 2019-08-31 14:36
我想问一下 牛客笔试sql题 是有测试用例显示准确率么 还是只在答题框里输入语句😂
点赞 回复 分享
发布于 2020-07-30 20:58
第二题用了两个嵌套,求大佬看看 Select d.sum_view, avg(d.user_avg_age) as avg_age From ( Select c.user_id, count(c.pv_id) as sum_view, avg(c.now_age) as user_avg_age from (select a.user_id, a.pv_id, (a. creat_time-b. creat_time+b.age) as now_age From pv_log a Inner join dimuser b On a.user_id = b.user_id ) c Group by c.user_id ) d Group by d.sum_view
点赞 回复 分享
发布于 2020-08-02 15:22

相关推荐

头像
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
评论
16
180
分享
牛客网
牛客企业服务