📣 独立日限时特惠: VIP通行证立减$68
回复: 33
跳转到指定楼层
上一主题 下一主题
收起左侧

FB onsite 关于SQL window function的使用

 
全局:

2019(1-3月) 分析|数据科学类 硕士 全职@meta - 内推 - Onsite  | | Fail | 在职跳槽

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

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
月初面了fb onsite,收到结果挂了,问了feedback也没回音,这个hr不是很靠谱,之前约时间就拖了很久。. 1point 3acres
面试题就不贴了,都是面经题,但是follow up都是各种各样的。我个人觉得case答得都还行,比较不顺利的是SQL那一轮。当然我也不清楚是不是这轮挂的- -. From 1point 3acres bbs

面SQL的时候很困惑。按道理因为我工作每天都用sql,对这块儿是比较有信心的。面的题目也是地里看到过的,我直接贴过来了。
Table Account ID
Account    date    Status  Spend
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
解错题目了,又改了一下,改错了。。又改回来,再次确认解释了一下。她回复说这样不够efficient,如果我们数据库很大怎么办。我表示可以在accounts里先filter一下最近两天的数据。她强调,你就用join吧。
.--

想跟大家探讨一下:
1. 在面试的时候,window function是普遍接受的吗?需不需要在做题前先确认一下?
2. 普通的join和window function哪种会比较efficient?

. check 1point3acres for more.

评分

参与人数 13大米 +39 收起 理由
Alexandraa + 1 给你点个赞!
shabushabuyoy + 2 给你点个赞!
lzchu1992 + 1 很有用的信息!
sjhhh3 + 1 给你点个赞!
xwniu + 1 涨知识了!赞这样的讨论

查看全部评分


上一篇:非典型 Google Product Analyst 电面
下一篇:立方smart的新鲜ds面经

本帖被以下淘专辑推荐:

推荐
lydia31358 2019-2-28 09:49:44 | 只看该作者
全局:
这个题为啥要用join? 我想的是:
Select count(distinct account) as n_first_fraud
from
(select account, min(date) as first_date
From account_id
Where status='fraud'
Group by account
)sub
where first_date=date(now())

评分

参与人数 3大米 +4 收起 理由
hjh2cmd + 1 这个舒服
hwaaron + 2 给你点个赞!
shuang_ca + 1 这个靠谱

查看全部评分

回复

使用道具 举报

全局:
select Date, count(distinct t2.Account)/count(distinct t1.account)-baidu 1point3acres
from table t1 ..
left join (select * from table where Status = 'Fraud') t2
on t1.account = t2.account
where t1.Spent > 0
group by Date
order by Date ASC;

select count(distinct Account) as numoffirstfraud. ----
from table. 1point3acres
where date = getdate()
and Status = 'Fraud'
and Account not in (
select Account
from table
where Status = 'Fraud'
and date <> dateadd(day,1,getdate()). ----
)

补充内容 (2019-3-8 11:02):
dateadd里应该是-1,打错
回复

使用道具 举报

推荐
Syndra 2019-8-27 00:58:37 | 只看该作者
全局:
本帖最后由 Syndra 于 2019-8-27 01:38 编辑

Q1. 1point 3acres
Select date,
count(case when status=’Fraud’ then distinct account else NULL end) / . 1point 3acres
Count(distinct account) as percentage
From table
Where spend > 0
Group by date

Q2
Select count(distinct account). .и
From.
(Select account, min(date) as first_fraud
From table
Where status = ‘Fraud’
Group by account)
As tmp ..
Where tmp. first_fraud = getdate();
第二种方法:. check 1point3acres for more.
Select count(distinct account)
From table
Where status = ‘Fraud’
And account not in (
Select account
From table
Where status = ‘Fraud’ and date < getdate();
. 1point3acres.com
回复

使用道具 举报

🔗
MadLily 2019-2-28 08:35:28 | 只看该作者
全局:
顶一下,也想问这个问题..... From 1point 3acres bbs
我的confusion在于,我记得fb邮件里说到sql说“think about Postgres”, postgres应该是有window functions的吧。。。。
回复

使用道具 举报

🔗
ysd2503 2019-2-28 09:15:52 | 只看该作者
全局:
我感觉面试官主要是想考怎么使用join吧。这题可以用left join 然后考虑好null的corner case就行了。所以我认为一般情况下,还是能使用join就join,尽量避免window function。 这边query不efficient可能是因为有subquery。 欢迎讨论。
回复

使用道具 举报

🔗
lydia31358 2019-2-28 10:06:44 | 只看该作者
全局:
ysd2503 发表于 2019-2-28 09:15
我感觉面试官主要是想考怎么使用join吧。这题可以用left join 然后考虑好null的corner case就行了。所以我 ...

请问用left join怎么写呢? 谢谢!
回复

使用道具 举报

🔗
lydia31358 2019-2-28 10:09:28 | 只看该作者
全局:
我觉得row_number() over(partition by account order by date desc) as rk 这里面不应该有desc。。
回复

使用道具 举报

🔗
shuang_ca 2019-2-28 12:50:14 | 只看该作者
全局:
lydia31358 那个更efficient,一般来说。
RANK要把所有recorders都要排序rank。GROUP min只需要把最小值float出来就好
回复

使用道具 举报

🔗
yyy77 2019-2-28 13:46:09 | 只看该作者
全局:
first_value(date) over(partition by account order by date) 这个会比全部排序好一点?
回复

使用道具 举报

🔗
yyy77 2019-2-28 13:51:23 | 只看该作者
全局:
不过实在想不出一个subquery都不用只用join怎么做这道题?
回复

使用道具 举报

🔗
 楼主| stella63 2019-2-28 13:58:38 | 只看该作者
全局:
yyy77 发表于 2019-2-28 13:51
不过实在想不出一个subquery都不用只用join怎么做这道题?

没有说不能用subquery
后来写的就是先找到今天是fraud的user left join 昨天是open的user,然后sum case when一下
这也是面试官想看到的写法
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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