San Jose各个房价 <1.5m 区域买房总结

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
码农求职神器Triplebyte:
不用海投
内推多家公司面试
坐标湾区
Games Startup
招聘游戏开发工程师
游戏初创公司招聘工程师、UIUX Designer和游戏策划
把贵司招聘信息放这里
查看: 7414|回复: 36
收起左侧

fb data scientist电面跪经

[复制链接] |试试Instant~ |关注本帖
LuckyGemini 发表于 2016-12-1 07:30:54 | 显示全部楼层 |阅读模式

2016(10-12月) 分析|数据科学类 硕士 实习@Facebook - Other - 技术电面  | Fail | fresh grad应届毕业生

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?Sign Up 注册获取更多干货

x
对sql不是很熟,然后又很紧张,当场扑街了.留学论坛-一亩-三分地
问的问题是,给两个table 一个是request(sender_id,request_id,time). Waral 博客有更多文章,
还有一个是accepts(accept_id, request_id,time)
求acceptance rate.1point3acres网

我用inner join on sender_id 他说不对……
然后求谁的朋友最多,我说从accepts table里选accept_id出现最多的
他说不对……
于是我就跪了……呜呜呜呜

评分

2

查看全部评分

miles0302 发表于 2017-2-4 16:58:56 | 显示全部楼层
小塔 发表于 2016-12-22 11:47
这样对么?

1, select count(accept_id) from accepts/(select count(request_id) from requests as rati ...

一个request id 没有被accept 就不会有accept id。所以要request left join accepts. Left join 后如果一个request_id对应的行出现accept id 是null的话就是这个request没有被accept。不是null的行数除以总行数就是acceptance rate
回复 支持 5 反对 0

使用道具 举报

TinyBOYSH 发表于 2017-5-28 07:37:33 | 显示全部楼层
问的问题是,给两个table 一个是request(sender_id,request_id,time)
还有一个是accepts(accept_id, request_id,time)
求acceptance rate. 牛人云集,一亩三分地

第二题:
方法一:. 牛人云集,一亩三分地
SELECT sender_id, COUNT(request_id) AS num_friends. from: 1point3acres
FROM request
WHERE request_id IN (SELECT request_id FROM accepts). 牛人云集,一亩三分地
GROUP BY sender.id
ORDER BY num_friends DESC

方法二:(不许用subquery). From 1point 3acres bbs
SELECT
FROM sender_id, COUNT(request_id) AS num_friends
(accepts LEFT JOIN requests ON accepts.request_id = request.request_id) as t
GROUP BY sender_id
ORDER BY num_friends DESC
回复 支持 1 反对 2

使用道具 举报

oliviajzma 发表于 2017-8-17 02:17:17 | 显示全部楼层
Aesculus 发表于 2017-5-11 05:10. 围观我们@1point 3 acres
第二道题为什么不能只看accept table? 难道只发了request还没被accept也算是朋友么?. Waral 博客有更多文章,
我想的是:

我觉得你的思路是对的。但是我和你的做法不一样的是我union了之后再算一个SUM ,group by id。意思就是,如果小A发了4个request的同时接受了3个其他人给他发的request,那小A的朋友数是不是应该是7个呢?

# who has the most friends?
SELECT id, SUM(count) as sum from
(
(SELECT sender_id AS id, COUNT(DISTINCT request_id) AS count
FROM request
GROUP BY sender_id)
UNION ALL
(SELECT accept_id AS id, COUNT(DISTINCT request_id) AS count
FROM accept
GROUP BY accept_id) .本文原创自1point3acres论坛
) x
GROUP BY id
ORDER BY sum DESC LIMIT 1

补充内容 (2017-8-17 02:53):
# friend acceptance rate (我觉得不用join date)
SELECT (COUNT(accept_id)/COUNT(*)) AS rate . 留学申请论坛-一亩三分地
FROM request a LEFT JOIN accept b
ON (a.request_id = b.request_id);
回复 支持 3 反对 0

使用道具 举报

lancerts 发表于 2017-11-3 05:47:23 | 显示全部楼层
第一题
select count(accept_id)/count(*) as accept_rate
from request r
left join accept a. from: 1point3acres
on (r.request_id = a.request_id
and r.sender_id =a.accept_id and
r.time1 < a.time2);  
这里应该r.sender_id =a.accept_id是必须的才对。。。如果没有.sender_id =a.accept_id, 胡发现non  null 不一定是 accept_id 和sender_id 是同一个人

或者. From 1point 3acres bbs
select sum(case when accept_id is not null then 1 else 0 end)/count(*) as accept_rate
from request r
left join accept a . 留学申请论坛-一亩三分地
on (r.request_id = a.request_id and r.sender_id = a.accept_id and r.time1 < a.time2);. visit 1point3acres for more.

补充内容 (2017-11-3 06:02):
第二题who has largest number of friends? 只需要从accept table中count(accept_id) group by reqeust_id

select request_id, count(accept_id)
. 1point3acresfrom accept
group by request_id
order by 2 DESC;

select req...
回复 支持 2 反对 0

使用道具 举报

jessie喵喵1001 发表于 2017-9-5 00:47:16 | 显示全部楼层
first question:
结合两个table,accept 的时间需要在request 的时间之后

select  count(a.accept_id)/count(*) from request r left join accept a on t.request_id = a.request_id and to_days(r.time ) < to_days(a.time)


second question:

only consider accept table, 从所有的request_id 中选出accept_id 最多的那个. From 1point 3acres bbs
-google 1point3acres
select request_id, count(accept_id)  from accept group by request_id order by count(accept_id) desc limit 1
回复 支持 0 反对 2

使用道具 举报

kurokubs 发表于 2017-3-28 13:08:38 | 显示全部楼层
drop table if exists request;
drop table if exists accept;

create table request(. more info on 1point3acres
  sender_id int,
  request_id int,
  time int
);

create table accept(.1point3acres网
  accept_id int,.1point3acres网
  request_id int,
  time int
);


insert into request Values(1,13,101);
insert into request Values(1,14,102); . 围观我们@1point 3 acres
insert into request Values(2,113,1111);.本文原创自1point3acres论坛
insert into request Values(3,115,103);
insert into request Values(3,117,12321);
insert into request Values(3,118,12311);. 1point 3acres 论坛
. 1point3acres
insert into accept Values(5,13,101);
insert into accept Values(6,14,102);
insert into accept Values(7,115,103);
insert into accept Values(3,113,1111);
来源一亩.三分地论坛. insert into accept Values(7,118,12311);. more info on 1point3acres
. 1point3acres
--Q1;


SELECT SUM(CASE WHEN accept_id IS NOT NULL THEN 1 ELSE 0 END)/ CAST(COUNT(*) AS DECIMAL(9,2)) AS accept_rate
FROM
request a
LEFT JOIN
accept b
ON a.request_id = b.request_id AND a.time = b.time
;

-- Q2;
.1point3acres网

SELECT t1.sender_id, (CASE WHEN t1.cnt IS NULL THEN 0 ELSE t1.cnt END) + (CASE WHEN t2.cnt IS NULL THEN 0 ELSE t2.cnt END) AS friend
FROM .本文原创自1point3acres论坛
(SELECT r1.sender_id, COUNT(*) as cnt FROM request r1 LEFT JOIN accept a1 on r1.request_id=a1.request_id AND r1.time = a1.time WHERE a1.accept_id IS NOT NULL GROUP BY r1.sender_id) t1
FULL OUTER JOIN. 牛人云集,一亩三分地
(SELECT a2.accept_id, COUNT(*) as cnt FROM request r2 LEFT JOIN accept a2 on r2.request_id=a2.request_id AND r2.time=a2.time WHERE a2.accept_id IS NOT NULL GROUP BY a2.accept_id) t2
ON t1.sender_id = t2.accept_id
WHERE t1.sender_id IS NOT NULL
ORDER BY 2 DESC LIMIT 1
;


. visit 1point3acres for more.
回复 支持 0 反对 1

使用道具 举报

houqingniao 发表于 2016-12-1 08:13:12 | 显示全部楼层
不应该on request_id么
回复 支持 反对

使用道具 举报

MulinZz 发表于 2016-12-1 10:27:41 | 显示全部楼层
求问sql 的题目要如何准备。
回复 支持 反对

使用道具 举报

wendyhz2hu 发表于 2016-12-1 11:15:29 | 显示全部楼层
楼主我也同跪,遇到同样的问题
回复 支持 反对

使用道具 举报

头像被屏蔽
在浙里 发表于 2016-12-1 11:23:46 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

linjunch 发表于 2016-12-1 12:26:41 | 显示全部楼层
1,select sum(case when accept_id is not Null the 1 else 0 end)/count(*) from request as r left join accepts as a on request_id and time
2,t1.request_id,t1.cnt1+t2.cnt2 as cnt_tot from (sel sender_id, count(*) as cnt1 from  request as r left join accepts as a on request_id and time where a.accept_id is not Null group by 1) as t1  left join (sel accept_id, count(*) as cnt2 from  request as r1 left join accepts as a1 on request_id and time where a1.accept_id is not Null group by 1)  as t2 on t1.sender_id=t2.accpet_id
order by 1 desc
回复 支持 反对

使用道具 举报

linjunch 发表于 2016-12-1 12:33:14 | 显示全部楼层
linjunch 发表于 2016-12-1 12:26
1,select sum(case when accept_id is not Null the 1 else 0 end)/count(*) from request as r left join  ...


1,select sum(case when accept_id is not Null the 1 else 0 end)/count(*) from request as r left join accepts as a on request_id and time
2,t1.request_id,t1.cnt1+t2.cnt2 as cnt_tot from (sel sender_id, count(*) as cnt1 from  request as r left join accepts as a on request_id and time where a.accept_id is not Null group by 1) as t1  outer join (sel accept_id, count(*) as cnt2 from  request as r1 left join accepts as a1 on request_id and time where a1.accept_id is not Null group by 1)  as t2 on t1.sender_id=t2.accpet_id
order by 2 desc 改了一下
回复 支持 反对

使用道具 举报

lha_1313 发表于 2016-12-1 14:02:19 | 显示全部楼层
fb的电面题三年都不带变的么。。
回复 支持 反对

使用道具 举报

raypeng 发表于 2016-12-1 14:13:04 | 显示全部楼层
我感觉面的时候我sql也很卡壳 结果过了 lz了解fb的ds么 希望可以聊聊
回复 支持 反对

使用道具 举报

小塔 发表于 2016-12-22 11:47:37 | 显示全部楼层
这样对么?

1, select count(accept_id) from accepts/(select count(request_id) from requests as ratio;

2, sender_id出现的次数 + accept_id出现的次数 full outer join on sender_id=accept_id ?
回复 支持 反对

使用道具 举报

LuckyJecci 发表于 2017-5-7 05:08:07 | 显示全部楼层
Q1:
SELECT (Count(accept_id)/ COUNT(*)) AS accept_rate
FROM accept

. visit 1point3acres for more.count(column)会不算NULL的,Count(*)算NULL
回复 支持 反对

使用道具 举报

atmoszh 发表于 2017-5-9 08:45:15 | 显示全部楼层
会有multiple request吧,所以应该需要dedup,即使变成朋友前所有request都只在database里存在一个,还有先成朋友后来又绝交了,后来又好了呢。我觉得time variable应该就是来identify这个的。还有算好友个数也是,一次好友接受了不代表永远都是好朋友哈,如果发现最后一个好友接受的时间点之后突然又有一个好友request(相同两个人),那说明当中他们绝交过一段儿吧。。。 不过如果面试官真的想考这些点的话确实有点过分了。。。
回复 支持 反对

使用道具 举报

Aesculus 发表于 2017-5-11 05:10:22 | 显示全部楼层
第二道题为什么不能只看accept table? 难道只发了request还没被accept也算是朋友么?
我想的是:

  1. select  t.id, sum(t.count) as friends
  2. from (
  3.     (select sender_id as id, count(*) as count from accept group by sender_id)
    . visit 1point3acres for more.
  4.     union. 1point3acres
  5.     (select accept_id as id, count(*) as count from accept group by accept_id)
  6. ) t
  7. group by t.id
复制代码

来源一亩.三分地论坛.
这样可以么?
回复 支持 反对

使用道具 举报

qiyahu 发表于 2017-5-12 10:03:58 | 显示全部楼层
感觉data scientist 不是sql就是sql
回复 支持 反对

使用道具 举报

iamchrisa 发表于 2017-5-23 10:15:33 | 显示全部楼层
有点儿疑惑为什么第一题sql是join的condition是time呢?.1point3acres网
比如今天request 明天accept 这两个timestamp明显不一样。
另外第二题怎么定义friend个数呢?.1point3acres网
求解答~
回复 支持 反对

使用道具 举报

NanaZhao 发表于 2017-8-24 04:50:11 | 显示全部楼层
lz 以及 ls 的各位亲, 谁给介绍下这个职位的要求什么的
面试只考了SQL吗?还对其他什么语言有要求吗?data scientist/analyst 上哪去刷题?
回复 支持 反对

使用道具 举报

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2018-5-26 18:20

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表