当前在线人数9060
首页 - 分类讨论区 - 电脑网络 - 数据库版 - 同主题阅读文章

此篇文章共收到打赏
0

  • 10
  • 20
  • 50
  • 100
您目前伪币余额:0
未名交友
[更多]
[更多]
SQL 电面试题
[版面:数据库][首篇作者:river08] , 2020年01月07日14:08:59 ,1518次阅读,34次回复
来APP回复,赚取更多伪币 关注本站公众号:
[首页] [上页][下页][末页] [分页:1 2 ]
river08
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 1 ]

发信人: river08 (sh), 信区: Database
标  题: SQL 电面试题
发信站: BBS 未名空间站 (Tue Jan  7 14:08:59 2020, 美东)

贴一个今天一家大保险公司的SQL电面试题:

1. Given a table numbers that has column "n" which is a sequence of integers
with a step of 3, find the gap:

numbers
+--+
|n |
+--+
|3 |
|6 |
|9 |
|12|
|18|
+--+

write a query: Expected Output:  15

我写好一个QUERY, 看哪位大神有更好思路,都是实战面试题。


--
※ 修改:·river08 於 Jan  7 16:48:47 2020 修改本文·[FROM: 146.]
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 146.]

 
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 2 ]

发信人: TheMatrix (TheMatrix), 信区: Database
标  题: Re: SQL 电面试题
发信站: BBS 未名空间站 (Tue Jan  7 17:51:25 2020, 美东)

如果知道只有最多一个gap number的话,那用一个lead lag function就可以了。如果
gap number数目不定的话,我觉得可能要用一个recursive cte。

【 在 river08 (sh) 的大作中提到: 】
: 贴一个今天一家大保险公司的SQL电面试题:
: 1. Given a table numbers that has column "n" which is a sequence of
integers
:  with a step of 3, find the gap:
: numbers
: +--+
: |n |
: +--+
: |3 |
: |6 |
: |9 |
: ...................




--
☆ 发自 iPhone 买买提 1.24.11
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2607:fb90:1d62:]

 
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 3 ]

发信人: TheMatrix (TheMatrix), 信区: Database
标  题: Re: SQL 电面试题
发信站: BBS 未名空间站 (Tue Jan  7 18:26:34 2020, 美东)

发个图。

【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: 如果知道只有最多一个gap number的话,那用一个lead lag function就可以了。如果
: gap number数目不定的话,我觉得可能要用一个recursive cte。
: integers




--
☆ 发自 iPhone 买买提 1.24.11
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2607:fb90:1d62:]


此主题相关图片如下:

[删除]

 
TazBingo
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 4 ]

发信人: TazBingo (TazBingo), 信区: Database
标  题: Re: SQL 电面试题
发信站: BBS 未名空间站 (Tue Jan  7 20:34:17 2020, 美东)

first generate a column called ID = identity (1,1).  也就是每一行都有了一个
ID,从1 开始增加直到最后一行。  然后就 select * from numbers where ID * 3 <>
n

--
☆ 发自 iPhone 买买提 1.24.11
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 108.]

 
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 5 ]

发信人: TheMatrix (TheMatrix), 信区: Database
标  题: Re: SQL 电面试题
发信站: BBS 未名空间站 (Wed Jan  8 09:00:54 2020, 美东)

上机试了一下,aggregate function max不能用在recursive cte的recursive部分,
max number要提出来,用join。见图。

【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: 发个图。




--
☆ 发自 iPhone 买买提 1.24.11
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 50.]


此主题相关图片如下:

[删除]

 
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 6 ]

发信人: TheMatrix (TheMatrix), 信区: Database
标  题: Re: SQL 电面试题
发信站: BBS 未名空间站 (Wed Jan  8 09:11:15 2020, 美东)

recursive cte的问题是有depth限制,sql server上缺省是100层,这是很小的,指望
它做循环是不行的。

所以这里要有一个生成循环index的方法。一般实际问题中数据table或者它的join就是
足够的空间。这个问题中,也可以写一个join recursive cte用指数函数方式生成
index空间。

【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: 上机试了一下,aggregate function max不能用在recursive cte的recursive部分,
: max number要提出来,用join。见图。




--
☆ 发自 iPhone 买买提 1.24.11
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 50.]

 
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 7 ]

发信人: TheMatrix (TheMatrix), 信区: Database
标  题: Re: SQL 电面试题
发信站: BBS 未名空间站 (Wed Jan  8 09:28:02 2020, 美东)

用2的指数函数的方式生成了index空间,recursive cte 100层的限制不是问题了,可
以生成2^100 index空间。见图。

【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: recursive cte的问题是有depth限制,sql server上缺省是100层,这是很小的,指望
: 它做循环是不行的。
: 所以这里要有一个生成循环index的方法。一般实际问题中数据table或者它的join就是
: 足够的空间。这个问题中,也可以写一个join recursive cte用指数函数方式生成
: index空间。




--
☆ 发自 iPhone 买买提 1.24.11
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 50.]


此主题相关图片如下:

[删除]

 
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 8 ]

发信人: TheMatrix (TheMatrix), 信区: Database
标  题: Re: SQL 电面试题
发信站: BBS 未名空间站 (Wed Jan  8 09:36:57 2020, 美东)

recursive cte据说效率低下,我觉得可能还是和循环次数有关,如果循环次数少应该
没有问题吧?这个我不太清楚。sql我是以逻辑的方式在用,内部实现效率我不熟悉。

比如一个经典的自join问题,manager employee link table,打印全部manager
employee path。如果知道path长度不太长,那么用recursive cte应该不会影响效率吧?

【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: 用2的指数函数的方式生成了index空间,recursive cte 100层的限制不是问题了,可
: 以生成2^100 index空间。见图。




--
☆ 发自 iPhone 买买提 1.24.11
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 50.]

 
gunu
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 9 ]

发信人: gunu (败家女), 信区: Database
标  题: Re: SQL 电面试题
发信站: BBS 未名空间站 (Wed Jan  8 10:42:34 2020, 美东)

是我想的太简单了?

SELECT prevnum + 3
FROM ( SELECTn, LAG(n,1) OVER(ORDER BY n) AS prevnum
       FROM numbers)
WHERE prevnum IS NOT NULL AND n - prevnum <> 3


--
※ 修改:·gunu 於 Jan  8 10:45:36 2020 修改本文·[FROM: 12.]
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 12.]

 
nmamtf
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 10 ]

发信人: nmamtf (nmamtf), 信区: Database
标  题: Re: SQL 电面试题
发信站: BBS 未名空间站 (Wed Jan  8 11:21:12 2020, 美东)


【 在 river08 (sh) 的大作中提到: 】
: 贴一个今天一家大保险公司的SQL电面试题:
: 1. Given a table numbers that has column "n" which is a sequence of
integers
:  with a step of 3, find the gap:
: numbers
: +--+
: |n |
: +--+
: |3 |
: |6 |
: |9 |
: ...................

現在面試出這麼難的題。 看來我再也找不到工作了。

--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 152.]

 
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 11 ]

发信人: TheMatrix (TheMatrix), 信区: Database
标  题: Re: SQL 电面试题
发信站: BBS 未名空间站 (Wed Jan  8 11:27:13 2020, 美东)

你这个只能找gap为一个的情况。

【 在 gunu (败家女) 的大作中提到: 】
: 是我想的太简单了?
: SELECT prevnum + 3
: FROM ( SELECTn, LAG(n,1) OVER(ORDER BY n) AS prevnum
:        FROM numbers)
: WHERE prevnum IS NOT NULL AND n - prevnum <> 3




--
☆ 发自 iPhone 买买提 1.24.11
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2607:fb90:b646:]

 
gunu
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 12 ]

发信人: gunu (败家女), 信区: Database
标  题: Re: SQL 电面试题
发信站: BBS 未名空间站 (Wed Jan  8 12:05:28 2020, 美东)

nope,
2,5,8,11,14,17,23,26,29,32,38
output
20
35
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 12.]

 
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 13 ]

发信人: TheMatrix (TheMatrix), 信区: Database
标  题: Re: SQL 电面试题
发信站: BBS 未名空间站 (Wed Jan  8 12:18:02 2020, 美东)

哦我的意思是gap长度,不是gap数量。

【 在 gunu (败家女) 的大作中提到: 】
: nope,
: 2,5,8,11,14,17,23,26,29,32,38
: output
: 20
: 35




--
☆ 发自 iPhone 买买提 1.24.11
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2607:fb90:b646:]

 
kiz
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 14 ]

发信人: kiz (泥偶), 信区: Database
标  题: Re: SQL 电面试题
发信站: BBS 未名空间站 (Wed Jan  8 12:19:56 2020, 美东)

自己创造一个正常的列有所有的值,然后去查这个检测的列,凡是查不到的,都是缺失
的。。。想那么麻烦干嘛?
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 76.]

 
duobaobei
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 15 ]

发信人: duobaobei (多宝花蓓), 信区: Database
标  题: Re: SQL 电面试题
发信站: BBS 未名空间站 (Wed Jan  8 13:21:09 2020, 美东)

Try the solution in the attachment


【 在 river08 (sh) 的大作中提到: 】
: 贴一个今天一家大保险公司的SQL电面试题:
: 1. Given a table numbers that has column "n" which is a sequence of
integers
:  with a step of 3, find the gap:
: numbers
: +--+
: |n |
: +--+
: |3 |
: |6 |
: |9 |
: ...................



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 50.]


此主题相关图片如下:

[删除]

 
yisong928
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 16 ]

发信人: yisong928 (松林物语), 信区: Database
标  题: Re: SQL 电面试题
发信站: BBS 未名空间站 (Wed Jan  8 14:25:44 2020, 美东)

我用tsql试了一下:

Declare @row int, @max int, @s int, @e int
Declare @table Table (n int)

If Object_ID('tempdb..#table') is not null Drop Table #table
Select pn, n, Row_Number() Over (Order By n) rn Into #table
From
(
Select n, LAG(n,1,0) Over (Order By n) pn, n-LAG(n,1,0) Over (Order By n) dn
From [table]) t
Where t.dn > 3

Select @max = Count(*) From #table
Set @row = 1
While @row <[email protected]
BEGIN
    Select @s = pn+3, @e = n From #table
    Where rn = @row
    While @s < @e
    BEGIN
        insert into @table
        select @s
        Set @s = @s + 3
    END
    Set @row = @row + 1
End

Select n from @table
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 96.]

 
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 17 ]

发信人: TheMatrix (TheMatrix), 信区: Database
标  题: Re: SQL 电面试题
发信站: BBS 未名空间站 (Wed Jan  8 14:28:33 2020, 美东)

跟我的第一个solution几乎一样。

我想起了Ken Thompson说,有一次和好像是Ritchie,两个人不小心各写了一段程序,C
语言的,完成同一个任务,第二天俩人一对照发现一摸一样,literally。

【 在 duobaobei (多宝花蓓) 的大作中提到: 】
: Try the solution in the attachment
: integers




--
☆ 发自 iPhone 买买提 1.24.11
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2607:fb90:b646:]

 
yisong928
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 18 ]

发信人: yisong928 (松林物语), 信区: Database
标  题: Re: SQL 电面试题
发信站: BBS 未名空间站 (Wed Jan  8 15:12:17 2020, 美东)


aggregate function好像不能直接用在recursive cte里面,可以考虑先赋值给变量后
再做recursive。

【 在 duobaobei (多宝花蓓) 的大作中提到: 】
: Try the solution in the attachment
: integers



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 96.]

 
zheh
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 19 ]

发信人: zheh (大象无形), 信区: Database
标  题: Re: SQL 电面试题
发信站: BBS 未名空间站 (Wed Jan  8 16:34:44 2020, 美东)

如果有连续两个missing, 会有问题。
18,21,30。。。

【 在 gunu (败家女) 的大作中提到: 】
: nope,
: 2,5,8,11,14,17,23,26,29,32,38
: output
: 20
: 35



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 205.]

 
coolbid
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 20 ]

发信人: coolbid (Dreams bring hopes), 信区: Database
标  题: Re: SQL 电面试题
发信站: BBS 未名空间站 (Wed Jan  8 16:45:42 2020, 美东)

不用那么麻烦,self join可以解决

select a.n
from numberTable a
where not exists (select b.n from numberTable b where a.n + 3 = b.n )
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 144.]

[首页] [上页][下页][末页] [分页:1 2 ]
[快速返回] [ 进入数据库讨论区] [返回顶部]
回复文章
标题:
内 容:

未名交友
将您的链接放在这儿

友情链接


 

Site Map - Contact Us - Terms and Conditions - Privacy Policy

版权所有,未名空间(mitbbs.com),since 1996