浅谈如何如何找PM职位和准备面试的一些经验

一亩三分地

 找回密码 注册账号

扫描二维码登录本站

最近看过此主题的会员


码农求职神器Triplebyte
不用海投
内推多家公司面试

Total Comp Calculator
输入offer信息
系统自动计算每年收入

科技公司如何
用数据分析驱动产品开发
coupon code: 20%off 打八折

深入浅出AB Test
从入门到精通
coupon code: 20%off 打八折
游戏初创公司招聘工程师、UIUX Designer和游戏策划
坐标湾区
DreamCraft创始团队
招聘游戏开发工程师
查看: 607|回复: 7
收起左侧

[其他] 请教个SQL的面试题

[复制链接] |试试Instant~
我的人缘0

分享帖子到朋友圈
cingher 发表于 2019-1-14 01:50:35 | 显示全部楼层 |阅读模式
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (4)
 
 
0% (0)    👎

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

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

x


P1.  You are given three separate tables (named trip_initiated, trip_cancel, and trip_complete) of the form:  

trip_initiated | trip_id, rider_id, driver_id, timestamp
trip_cancel | trip_id, rider_id, driver_id, timestamp
trip_complete | trip_id, rider_id, driver_id, timestamp

Each trip_id in these tables will be unique and only appear once, and a trip will only ever result in a single cancel event or it will be completed. Write a query to create a single table with one row per trip event sequence (trip initiated → cancel/complete):

dispatch_events | trip_id, rider_id, driver_id, initiated_ts, cancel_ts, complete_ts

There should only be a single row per trip with a unique trip_id.  

P2.  Write at least one test query to validate the data in the resulting table. Indicate what you would expect the query to return if the data were valid.


P1 如下写法对不对?

SELECT ti.trip_id trip_id, ti.rider_id rider_id, ti.driver_id driver_id, ti.timestamp initiated_ts, tc1.timestamp cancel_ts, tc2.timestamp complete_ts
FROM trip_initiated ti
JOIN trip_cancel tc1
ON t1.trip_id = tc1.trip_id
JOIN trip_complete tc2
ON t1.trip_id = tc2.trip_id


还有请教P2题目是什么意思? 谢谢!

评分

参与人数 1大米 +5 收起 理由
MRlfy + 5 给你点个赞!

查看全部评分


上一篇:CC 189 hints 归类
下一篇:市场均衡
我的人缘0
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   95% (358)
 
 
4% (16)    👎
个人想法,有错欢迎指正。P1不能join, 需要left join两个table, 因为join的话你选择的是两个table都有的。2和3两个都是1的子集,需要left join
回复

使用道具 举报

我的人缘0
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   95% (358)
 
 
4% (16)    👎
p2没见过,我的想法是,验证给的数据是valid的,根据题目,首先2和3没有交集,可以join 2,3看一下有没有交集。然后2,3各自不能有duplicate,可以看一下2,3 count(*)和count(unique id)是不是一样多。
回复

使用道具 举报

我的人缘0
magicsets 发表于 2019-1-14 09:19:01 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   98% (752)
 
 
1% (8)    👎
P1可以只做一次join(或者left outer join,如果存在既没有cancel又没有complete的trip的话)

[SQL] 纯文本查看 复制代码
SELECT ti.trip_id, ti.rider_id, ti.driver_id,
       ti.timestamp AS initiated_ts,
       tc.cancel_ts, tc.complete_ts
FROM trip_initiated ti LEFT OUTER JOIN (
       SELECT trip_id, timestamp AS cancel_ts, NULL as complete_ts
       FROM trip_cancel
       UNION ALL
       SELECT trip_id, NULL AS cancel_ts, timestamp as complete_ts
       FROM trip_complete
     ) tc ON ti.trip_id = tc.trip_id;

评分

参与人数 2大米 +8 收起 理由
MRlfy + 5 给你点个赞!
cingher + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

我的人缘0
little9 发表于 2019-1-19 04:10:16 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (19)
 
 
0% (0)    👎
magicsets 发表于 2019-1-14 09:19
P1可以只做一次join(或者left outer join,如果存在既没有cancel又没有complete的trip的话)

[mw_shl_c ...

这题要用union all吗? 如果两个table没有交集是不是用union也可以呢
回复

使用道具 举报

我的人缘0
magicsets 发表于 2019-1-19 06:11:12 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   98% (752)
 
 
1% (8)    👎
little9 发表于 2019-1-19 04:10
这题要用union all吗? 如果两个table没有交集是不是用union也可以呢

union等价于union distinct,相当于union all + 去重,换句话说union all是不去重的

参考:https://dev.mysql.com/doc/refman/8.0/en/union.html

所以应该是“一般情况下用union,然后如果两个table没有交集那么用union all也可以”


补充内容 (2019-1-19 06:12):
给的那个链接网页中有这么一句:A DISTINCT union can be produced explicitly by using UNION DISTINCT or implicitly by using UNION with no following DISTINCT or ALL keyword.
回复

使用道具 举报

我的人缘0
xyjxlxs 发表于 2019-1-19 09:42:02 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (63)
 
 
0% (0)    👎
1. 两个join都改成left join
2. 在result table里query trip_cancel表中的trip_id, 返回的query中complete_ts应该是null;同理在result table里query trip_complete表中的trip_id, 返回的query中cancel_ts应该是null
个人想法哈 你看对么
回复

使用道具 举报

我的人缘0
carriekyyy 发表于 2019-1-19 11:21:07 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   98% (141)
 
 
1% (2)    👎
SQL小白拿第一题练一下手,请各位大神指教,请指出错误的地方,好让我学习学习,谢谢:

SELECT a.trip_id, a.rider_id, a.driver_id,
                a.timestamp as initiated_ts,
                b. timestamp as cancel_ts,
                c.timestamp as complete_ts
FROM  
(SELECT a.trip_id, a.rider_id, a.driver_id,
                  a.timestamp as initiated_ts,
                  b. timestamp as cancel_ts
FROM trip_initiated  a LEFT JOIN trip_cancel b ON a.trip_id = b.trip_id)
LEFT JOIN trip_complete  c ON a.trip_id = c.trip_id
回复

使用道具 举报

游客
请先登录
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

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

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

手机版|小黑屋|一亩三分地

GMT+8, 2019-6-18 10:40

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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