.NET高级工程师面试题之SQL篇

1 题目

这确实是一个真实的面试题,琢磨一下吧!知识不用,就会丢掉,我太依赖各种框架和dll了,已经忘记了最基本的东西。有多久没有写过SQL了,我已经不记得了。

已知表信息如下:

Department(depID, depName),depID 系编号,DepName系名

Student(stuID, name, depID) 学生编号,姓名,系编号

Score(stuID, category, score) 学生编码,科目,成绩

找出每一个系的最高分,并且按系编号,学生编号升序排列,要求顺序输出以下信息:

系编号,系名,学生编号,姓名,总分

2 实验

3 结果

  面试的时候,没有写出来,当时脑袋昏沉沉的。也确实好久没有写复杂的sql语句了。今天花了2到3个小时,终于试出来了。不知道有没有更好的写法?

4 补充

看了那么多的评论,自己写的真的不咋样,可惜今天没有时间细细看了,现在还在公司加班!但百度一下的时间还是有滴,So整理一下相关资料先。

(1)、SQL2005四个排名函数(row_number、rank、dense_rank和ntile)的比较

(2)、关于with as:使用WITH AS提高性能简化嵌套SQL

 5 参考SQL

  正确的答案的结果是一样的,错误的各有各的不同,正确的答案后的性能也各有各的不同,不过呢,暂时没有水平去分析它,但是有空会把这些全部看一遍.谢谢各位啦!【2015-05-13 23:44】

4 收藏 1 评论

相关文章

可能感兴趣的话题



直接登录
最新评论
  • hongy   2015/11/17

    with t as (
    select p.Depid, p.depName, d.stuid, d.stuname, sum(score) score
    from score s
    inner join student d on d.stuid = s.stuid
    inner join department p on p.depid = d.deptid
    group by p.depid, p.depName, d.stuid, d.stuname
    )

    select *
    from t a
    where not exists (
    select *
    from t b
    where b.depid = a.depid
    and b.score > a.score)

跳到底部
返回顶部