武汉明源软件之我在考官面前是个渣滓----

华为黑名单 2014-10-17 05:31:00
今天去明源面试了下面是个SQL题目,我做完之后改卷子的人说我思路不清晰,水平差的一踏糊涂。哎做题没动脑筋怎么简单怎么写好长时间没写SQL了。大家看看我写的是错的吗?我回来上机搞了下答案是对的方法麻烦了点。麻烦你说清楚啊不能使用游标啊高考解题目还限制不能使用什么方法吗?
A 学生表

ID Name age Rank

1 李1 12 0

2 李2 33 0

3 李3 32 0

4 李4 34 0

5 李5 36 0

6 李6 37 0

7 李7 38 0

8 李8 39 0

9 李9 40 0

B分数表

ID subject score

4 语文 88

4 数学 67

5 语文 88

5 数学 67

6 语文 88

6 数学 64

7 语文 65

8 数学 67

9 语文 72

10 数学 73

1.) 统计每门功课前三名学生的ID,name ,subject ,score ?
下面是我写的没动脑筋写的
DECLARE @subject VARCHAR(50)
DECLARE tempCurSor CURSOR FOR
SELECT DISTINCT subject FROM dbo.B
OPEN tempCurSor
FETCH NEXT FROM tempCurSor INTO @subject
WHILE (@@FETCH_STATUS=0)
BEGIN
select top 3 A.ID,A.Name,B.subject,B.score
from A left join B on A.ID=B.ID
AND B.subject = @subject order by score DESC
FETCH NEXT FROM tempCurSor INTO @subject
END
CLOSE tempCurSor
DEALLOCATE tempCurSor
...全文
296 点赞 收藏 9
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
华为黑名单 2014-10-21
引用 5 楼 sp1234 的回复:
估计,面试官想看到 row_number() 函数被使用,或者想看到 where (select count(*) from ... as t where t.subject=B.subject and t.score>B.score) <3 被使用,这类的sql语句。 实际上这个问题,如果允许使用游标,那么使用游标其实“很合适”。 假设你使用“客户端驱动”从客户端去操作数据库,那么使用游标会在客户端与服务器端传送巨大量的消息,而且这个缓慢的过程中还锁住了服务器端,使得“一个客户端查询快了微不足道的一点,但是多用户查询的整体效率降低”。因为它极易如此,所以一般来说我们“禁止”普通程序员使用游标。 如果我写这种程序,我可能宁可“笨一点”,先把 SELECT DISTINCT subject FROM dbo.B 查询到应用程序中,然后再循环查询每一个课程的前三名。
我又写了个答案 select distinct t1.* from B t1 where t1.id in (select top 3 B.id from B INNER JOIN a ON a.id =B.id where subject = t1.subject order by score desc) order by t1.subject 这是想了好半天的哎!!他们只要求SQL 写的好的。
回复
华为黑名单 2014-10-21
引用 7 楼 jhdxhj 的回复:
出这样的题目,不如搞几个微积分的题目来的实在
他们搞房地产的说SQL是门槛写不好就可以滚蛋了!
回复
jhdxhj 2014-10-20
出这样的题目,不如搞几个微积分的题目来的实在
回复
jhdxhj 2014-10-20
出这样的SQL题目能反应什么问题?与.NET有毛关系?
回复
估计,面试官想看到 row_number() 函数被使用,或者想看到 where (select count(*) from ... as t where t.subject=B.subject and t.score>B.score) <3 被使用,这类的sql语句。 实际上这个问题,如果允许使用游标,那么使用游标其实“很合适”。 假设你使用“客户端驱动”从客户端去操作数据库,那么使用游标会在客户端与服务器端传送巨大量的消息,而且这个缓慢的过程中还锁住了服务器端,使得“一个客户端查询快了微不足道的一点,但是多用户查询的整体效率降低”。因为它极易如此,所以一般来说我们“禁止”普通程序员使用游标。 如果我写这种程序,我可能宁可“笨一点”,先把 SELECT DISTINCT subject FROM dbo.B 查询到应用程序中,然后再循环查询每一个课程的前三名。
回复
A left join B 还是 A right join B?这个你需要改变测试数据,再测试一下。 一般来说,面试时要求你使用1、2条SQL语句来得到查询结果(使用2条语句,那么第一条可以创建一个“临时表”)。这样的要求比较容易看出逻辑表达能力。 其实你的程序逻辑是没有什么问题的,一点也看不出“思路不清晰,水平差的一踏糊涂”的迹象。只是使用游标会让程序臃肿和阅读起来费时间而已。
回复
jhdxhj 2014-10-18
这样的题目有什么意义?这样的公司在北京是没市场的,只有在武汉这个地方摧残那些人而已
回复
jhdxhj 2014-10-18
最新的技术都用NOSQL了,他们还在强调SQL,等着淘汰吧
回复
华为黑名单 2014-10-17
我这答案是个错的吗 蛋疼看来理念不同。难道你们觉得所有的东西都要把底层写出来吗?那有.NET 搞毛直接用C开发网站啊...................................
回复
发动态
发帖子
非技术区
创建于2007-09-28

7683

社区成员

.NET技术 非技术区
申请成为版主
社区公告
暂无公告