12
返回列表 发新帖
楼主: Shawnh19
跳转到指定楼层
上一主题 下一主题
收起左侧

[其他] DA SQL 电面题

🔗
幻影奇袭 2020-1-12 13:54:41 | 只看该作者
全局:
rainbowzyh 发表于 2020-1-10 05:31
SELECT  n + 3
FROM    numbers as n1
WHERE   NOT EXISTS

请避免WHERE NOT EXISTS接subquery,performance很差。需要用它的时候总是可以用join解决
回复

使用道具 举报

🔗
smoothiethu 2020-1-12 19:24:35 | 只看该作者
全局:
幻影奇袭 发表于 2020-1-12 13:51
SELECT a.n+3
FROM numbers a
LEFT OUTER JOIN numbers b

想问一下层主,最后b.n is NULL难道不是12 18那两行都是NULL吗?不会最后输出15和21两个数吗?谢谢已加米
回复

使用道具 举报

🔗
幻影奇袭 2020-1-13 01:12:43 | 只看该作者
全局:
本帖最后由 幻影奇袭 于 2020-1-13 01:40 编辑
smoothiethu 发表于 2020-1-12 19:24
想问一下层主,最后b.n is NULL难道不是12 18那两行都是NULL吗?不会最后输出15和21两个数吗?谢谢已加米

哎呀疏漏了,没有仔细考虑corner case。我在原回复里补充了。 我那个解,如果有2个或以上gap也不行,比如input是(5,14),只会输出8,然而正确输出是8,11. 对多gap的情况,一个思路是构建另一个没有gap的table:
select generate_series(min(n), max(n), 3) FROM numbers
然后numbers left join这个table来找出所有gap.

另外一个思路是找出n和gap_size,比如(5, 2). 有了这个之后怎么输出答案8,11, 我也不知道。。。

with ranked AS
SELECT n, ROW_NUMBER() OVER (ORDER BY n) AS row_number
FROM numbers


with gap_size AS
select a.n, (b.n - a.n - 3)/3 AS gap_size
from ranked a
join ranked b
on a.row_number = b.row_number-1
where b.n-a.n <> 3
回复

使用道具 举报

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

本版积分规则

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