今日话题:分享你觉得高大上且鬼父神工的算法实现

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货

扫描二维码登录本站

最近看过此主题的会员


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

科技公司如何
用数据分析驱动产品开发
Coupon code: best

深入浅出AB Test
从入门到精通
Coupon code: best

E轮2.5亿美元融资
一起作业诚聘
机器学习/数据/教育等职位
游戏初创公司招聘工程师、UIUX Designer和游戏策划
坐标湾区
DreamCraft创始团队
招聘游戏开发工程师
把贵司招聘信息放这里
查看: 177|回复: 7
收起左侧

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

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

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

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

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

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 归类
下一篇:寻找湾区的小伙伴一起刷题一起Mock
我的人缘0
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  73% (38)
 
 
26% (14)  踩
个人想法,有错欢迎指正。P1不能join, 需要left join两个table, 因为join的话你选择的是两个table都有的。2和3两个都是1的子集,需要left join
回复

使用道具 举报

全球28万学生4.7分推荐
我的人缘0
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  73% (38)
 
 
26% (14)  踩
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% (428)
 
 
1% (6)  踩
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 发表于 4 天前 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  100% (9)
 
 
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 发表于 4 天前 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  98% (428)
 
 
1% (6)  踩
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 发表于 4 天前 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  100% (29)
 
 
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 发表于 4 天前 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  93% (14)
 
 
6% (1)  踩
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-1-23 14:56

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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