杭州阿里巴巴第二轮电话面试,被BS好几回,特留此贴以及问题,请大家指点!
大家还记得我8天前发的阿里巴巴一面的帖子吗?过去了一个星期了,我以为事情已经黄了,所以就再也没有做相关准备,结果今天阿里巴巴第二轮笔试电话突然而至,搞的我措手不及啊!
1,如果有row_number() 分析函数,如果我有一张学生表student,里面有班级、学生名、分数,排名我想得到如下数据,该如何用row_number() 排序写一条sql获取,不能用union all来连接获取。
--班级、学生名、分数,排名
一班 李一 100 1
一班 李二 100 1
一班 李三 100 1
一班 李四 100 4
一班 李五 99 5
一班 李六 98 6
.......-- 一班很多学生,依次排下去。
二班 王一 100 1
二班 王二 100 1
二班 王三 99 3
二班 王四 98 4
二班 王五 80 5
...... 二班有很多学生,依次排下去。
我的答案是:select banji,name,score,row_number() over(order by banji, name,score desc)。结果他说不对,最近在做sqlserver开发,可能长时间没有碰oracle了,所以导致当时一下没有想出来,被严重BS了,事后仔细一想,其实很简单的,我以前还写过类似的sql,只是时间长了,忘记了,呵呵,不知道大家知道怎么写了么?
2,有关优化的事情,A表500万数据,B表2亿条数据。A与B的数据结构相同,select count(*) from A,B where A.id=B.id。问下,这条sql很耗时,如何优化这条sql,使之效率最高。
我答案,看执行计划,是否走索引,不走的话,就重建所以,他说,如果索引都是完好无损的,而且2亿条数据走索引时优化不过来的,问我还有别的方式来优化这条sql不?我一时就答不出来了,因为sql很简单了,不知道如何优化了,而且我们的oracle库也没有类似的查询,所以一下想不出来怎么回答,结果又被BS了。
3,数据仓库里面,如果你根据客户的需求写完了sql,取到了数据,你如何保证这些数据时准确的呢?
我回答,1,根据需求写一些测试sql来验证,比如数据总量,主要字段,主要信息,抽取几条验证。
2,找客户,跳一些数据来验证。
结果他反问我这些方法是我自己想出来的吗?我说是的,我感觉我的回答不太对,有点不妙。
还有一些我回答正确的问题,比如管理方面的,我就答的不错,我就不列出来了。反正今天在引以为强项的sql编写与优化上面被问到了,证明我的oracle开发基本功还是很差的,以后要加强这方面的练习了。
欢迎大家对上面的3个问题,发表下自己的看法,在此先行谢过!