最近面试遇到了很奇葩的事情

wylwyl1108 2014-03-19 06:09:56
至少碰到3,4次了,在笔试的时候遇到过这样的一道题,题目类型一模一样,连里面的数据都是一模一样。。
难道网上有这道题目?还是说这是一道经典的题目??????

题目
从表中取出第31条到第40条数据,其中ID列自增加,且不一定连续。

这道题其实是考 row_number的用法。增加新的列用于标号。。然后取 31到40即可。。

其实我还想到一个自己觉得更好的方法
select top 40 * from table
except
select top 30 * from table


只是觉得为何如此的巧合。。很多面试官水平也不咋样,还觉得我第二种做法是乱写,以为我不会。
明明就自己不知道,而且太主观了。。好像只能用row_number一样。。这题出的。。。
...全文
172 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
山寨DBA 2014-03-20
  • 打赏
  • 举报
回复
引用 9 楼 t101lian 的回复:
[quote=引用 楼主 wylwyl1108 的回复:] 至少碰到3,4次了,在笔试的时候遇到过这样的一道题,题目类型一模一样,连里面的数据都是一模一样。。 难道网上有这道题目?还是说这是一道经典的题目?????? 题目 从表中取出第31条到第40条数据,其中ID列自增加,且不一定连续。 这道题其实是考 row_number的用法。增加新的列用于标号。。然后取 31到40即可。。 其实我还想到一个自己觉得更好的方法 select top 40 * from table except select top 30 * from table 只是觉得为何如此的巧合。。很多面试官水平也不咋样,还觉得我第二种做法是乱写,以为我不会。 明明就自己不知道,而且太主观了。。好像只能用row_number一样。。这题出的。。。
因为这是面试宝典上的题目。。[/quote] 哪里能搞到面试宝典?有网址链接吗?
t101lian 2014-03-20
  • 打赏
  • 举报
回复
引用 楼主 wylwyl1108 的回复:
至少碰到3,4次了,在笔试的时候遇到过这样的一道题,题目类型一模一样,连里面的数据都是一模一样。。 难道网上有这道题目?还是说这是一道经典的题目?????? 题目 从表中取出第31条到第40条数据,其中ID列自增加,且不一定连续。 这道题其实是考 row_number的用法。增加新的列用于标号。。然后取 31到40即可。。 其实我还想到一个自己觉得更好的方法 select top 40 * from table except select top 30 * from table 只是觉得为何如此的巧合。。很多面试官水平也不咋样,还觉得我第二种做法是乱写,以为我不会。 明明就自己不知道,而且太主观了。。好像只能用row_number一样。。这题出的。。。
因为这是面试宝典上的题目。。
--小F-- 2014-03-20
  • 打赏
  • 举报
回复
guguda2008 2014-03-20
  • 打赏
  • 举报
回复
加ORDER BY应该就没问题了
select top 40  *  from table ORDER BY ID
except
select top 30  *  from table ORDER BY ID
KeepSayingNo 2014-03-20
  • 打赏
  • 举报
回复
那是考试官太水了,你的写法肯定是可以的
我现在在路上 2014-03-20
  • 打赏
  • 举报
回复
引用 3 楼 oyc1992 的回复:
not in row_number
我现在知道也是这两种,不过好像有更高效的
我现在在路上 2014-03-20
  • 打赏
  • 举报
回复
怎么看,那么像考分页的、、、
wylwyl1108 2014-03-20
  • 打赏
  • 举报
回复
引用 9 楼 t101lian 的回复:
[quote=引用 楼主 wylwyl1108 的回复:] 至少碰到3,4次了,在笔试的时候遇到过这样的一道题,题目类型一模一样,连里面的数据都是一模一样。。 难道网上有这道题目?还是说这是一道经典的题目?????? 题目 从表中取出第31条到第40条数据,其中ID列自增加,且不一定连续。 这道题其实是考 row_number的用法。增加新的列用于标号。。然后取 31到40即可。。 其实我还想到一个自己觉得更好的方法 select top 40 * from table except select top 30 * from table 只是觉得为何如此的巧合。。很多面试官水平也不咋样,还觉得我第二种做法是乱写,以为我不会。 明明就自己不知道,而且太主观了。。好像只能用row_number一样。。这题出的。。。
因为这是面试宝典上的题目。。[/quote] 。。其实吧,面试就和以前考试做卷子是一回事。 就像高三拼命做卷子一样。。 不过我还真没专门做笔试训练过。。。。。都是靠自己积累的知识和笔试经验。。 不过,现在变坏了。我笔试万一忘记了会iphone百度一下哈哈。。
LongRui888 2014-03-20
  • 打赏
  • 举报
回复
引用 12 楼 wylwyl1108 的回复:
[quote=引用 2 楼 yupeigu 的回复:] 你的方法: select top 40 * from table except select top 30 * from table 虽然想法不错,但是是有问题的,为什么呢? 因为你用的是*,就是所有的列,问题是select top 40 * from table 和 select top 30 * from table, 除了id列可以相减,其他列由于不一样,所以没办法进行except集合相减的,所以如果id是主键,不重复的,那么按照你的思路,可以这样:
select tt.*
from 
(
select top 40  id  from table
except
select top 30  id  from table
)t
inner join table tt on tt.id = t.id
怎么不能相减了,except的两个结果是是同一张表,列都一样的。。[/quote] 仔细想想是能相减的
wylwyl1108 2014-03-20
  • 打赏
  • 举报
回复
引用 2 楼 yupeigu 的回复:
你的方法: select top 40 * from table except select top 30 * from table 虽然想法不错,但是是有问题的,为什么呢? 因为你用的是*,就是所有的列,问题是select top 40 * from table 和 select top 30 * from table, 除了id列可以相减,其他列由于不一样,所以没办法进行except集合相减的,所以如果id是主键,不重复的,那么按照你的思路,可以这样:
select tt.*
from 
(
select top 40  id  from table
except
select top 30  id  from table
)t
inner join table tt on tt.id = t.id
怎么不能相减了,except的两个结果是是同一张表,列都一样的。。
wylwyl1108 2014-03-20
  • 打赏
  • 举报
回复
引用 7 楼 guguda2008 的回复:
加ORDER BY应该就没问题了
select top 40  *  from table ORDER BY ID
except
select top 30  *  from table ORDER BY ID
ID是自增加的。所以不需要order by
直面人生 2014-03-19
  • 打赏
  • 举报
回复
not in row_number
LongRui888 2014-03-19
  • 打赏
  • 举报
回复
你的方法: select top 40 * from table except select top 30 * from table 虽然想法不错,但是是有问题的,为什么呢? 因为你用的是*,就是所有的列,问题是select top 40 * from table 和 select top 30 * from table, 除了id列可以相减,其他列由于不一样,所以没办法进行except集合相减的,所以如果id是主键,不重复的,那么按照你的思路,可以这样:
select tt.*
from 
(
select top 40  id  from table
except
select top 30  id  from table
)t
inner join table tt on tt.id = t.id
發糞塗牆 2014-03-19
  • 打赏
  • 举报
回复
没主键的情况
--首先,生成带记录号的临时表
select id=identity(int,1,1),* into #temp

--然后,就可以用下面的语句检索出第M到N条记录:
select * from #temp where id between m and n


2.有主键的情况
检索出第m页,每页共n条记录的语句

select top n from 你的表 where 主键 not in(select (m-1) * n 主键 from 你的表)
m,n均为常量,不能为变量

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧