楼主: jinaqu

[SQL] 【讨论】大公司面试题,测测你的SQL水平

[复制链接]
论坛徽章:
403
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2014-12-21 21:04 | 显示全部楼层
jinaqu 发表于 2014-12-21 11:27
“有表财务表,数据如下
year       Profit
2007       1000000000

你是怎么写的

使用道具 举报

回复
认证徽章
论坛徽章:
3
优秀写手
日期:2014-11-11 06:00:15沸羊羊
日期:2015-03-04 14:55:412015年新春福章
日期:2015-03-06 11:59:47
发表于 2014-12-21 21:38 | 显示全部楼层
时间有限,就随便拼在一起了,应该是直接-

使用道具 举报

回复
论坛徽章:
3
优秀写手
日期:2014-12-20 06:00:17喜羊羊
日期:2015-03-04 14:54:422015年新春福章
日期:2015-03-06 11:59:47
发表于 2014-12-23 11:24 | 显示全部楼层
select Stu_Name,Class_id,lession_Name
from T_Stu_Profile a,T_Lession b
where  not exists
(select 1 from T_Score c where a.Stu_id=c.Stu_id and b.Stu_id=c.Lession_id );
不知道有没有更好的写法,这样写如果学生表数据量大,应该也不快吧

使用道具 举报

回复
认证徽章
论坛徽章:
1
优秀写手
日期:2014-12-06 06:00:14
发表于 2014-12-23 14:47 | 显示全部楼层
jinaqu 发表于 2014-12-18 18:37
帮忙搞搞看,我没搞出来

搞出来比较麻烦,有没有简便的,11g 行列互转也可以用 pivot和unpivo
  1. demo@gavindb>l
  2.   1  SELECT  r.lession_name,
  3.   2          MAX(DECODE(r.rank,1,r.top,NULL)) top1,
  4.   3          MAX(DECODE(r.rank,2,r.top,NULL)) top2,
  5.   4          MAX(DECODE(r.rank,3,r.top,NULL)) top3
  6.   5    FROM (
  7.   6          WITH p AS(
  8.   7              SELECT lession_id,
  9.   8                     score,
  10.   9                     stu_id,
  11. 10                     RANK() OVER(PARTITION BY lession_id ORDER BY score DESC) rank
  12. 11                FROM t_score
  13. 12               GROUP BY lession_id,score,stu_id
  14. 13          )
  15. 14          SELECT m.lession_id,m.lession_name,n.stu_name ||'+'|| u.score top,u.rank
  16. 15            FROM t_lession m,t_stu_profile n,p u
  17. 16           WHERE m.lession_id = u.lession_id
  18. 17             AND n.stu_id = u.stu_id
  19. 18           ORDER BY u.lession_id,u.rank
  20. 19  ) r
  21. 20*  GROUP BY r.lession_name
  22. demo@gavindb>/

  23. LESSION_NAME    TOP1            TOP2            TOP3
  24. --------------- --------------- --------------- ---------------
  25. 数据            郭东+86
  26. 物理            李西+75
  27. 化学            钱南+98
  28. 英语            张北+85
  29. 语文            郭东+90         李西+84
复制代码

使用道具 举报

回复
论坛徽章:
6
2014年新春福章
日期:2014-02-18 16:50:09马上有车
日期:2014-02-18 16:50:09优秀写手
日期:2014-05-29 05:59:082015年新春福章
日期:2015-03-04 14:55:132015年新春福章
日期:2015-03-06 11:59:47秀才
日期:2017-09-18 17:02:34
发表于 2014-12-23 17:24 | 显示全部楼层
本帖最后由 mailghyth 于 2014-12-23 17:24 编辑

第二题
WITH AA AS (
SELECT C.LESSION_NAME,B.STU_NAME,A.SCORE
FROM T_SCORE A,T_STU_PROFILE B,T_LESSION C
WHERE A.STU_ID=B.STU_ID AND A.LESSION_ID=C.LESSION_ID ORDER BY C.LESSION_NAME
)SELECT LESSION_NAME,
MAX(DECODE(SRANK,1,STU_NAME||SCORE)),
MAX(DECODE(SRANK,2,STU_NAME||SCORE)),
MAX(DECODE(SRANK,3,STU_NAME||SCORE))
FROM (SELECT LESSION_NAME,STU_NAME,SCORE,RANK() OVER(PARTITION BY LESSION_NAME ORDER BY SCORE DESC) SRANK FROM AA) D
GROUP BY LESSION_NAME

使用道具 举报

回复
论坛徽章:
11
2012新春纪念徽章
日期:2012-01-04 11:56:19技术图书徽章
日期:2017-11-10 14:15:52罗罗诺亚·索隆
日期:2017-08-30 13:50:35马上有钱
日期:2015-02-09 13:21:28优秀写手
日期:2014-12-24 06:00:14蛋疼蛋
日期:2014-12-01 15:24:16比亚迪
日期:2013-09-02 15:14:362013年新春福章
日期:2013-02-25 14:51:24蛋疼蛋
日期:2012-11-18 10:54:53ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:14
发表于 2014-12-24 09:07 | 显示全部楼层
jinaqu 发表于 2014-12-18 18:26
B.2.        找出课程的前三名,以下列形式显示
课程        第一名(姓名+分数)        第二名(姓名+分数)        第三名(姓名+分数)
...


select s.lession_name,
       (select qiansan
          from (select t.lession_id,
                       r.stu_name || '+' || t.score qiansan,
                       rank() over(partition by t.lession_id order by t.score desc) ranks
                  from T_Score t, T_Stu_Profile r
                 where r.stu_id = t.stu_id)
         where ranks = 1
           and lession_id = s.lession_id) 第一名,
              (select qiansan
          from (select t.lession_id,
                       r.stu_name || '+' || t.score qiansan,
                       rank() over(partition by t.lession_id order by t.score desc) ranks
                  from T_Score t, T_Stu_Profile r
                 where r.stu_id = t.stu_id)
         where ranks = 2
           and lession_id = s.lession_id) 第二名,
              (select qiansan
          from (select t.lession_id,
                       r.stu_name || '+' || t.score qiansan,
                       rank() over(partition by t.lession_id order by t.score desc) ranks
                  from T_Score t, T_Stu_Profile r
                 where r.stu_id = t.stu_id)
         where ranks = 3
           and lession_id = s.lession_id) 第三名
  from T_Lession s

使用道具 举报

回复
认证徽章
论坛徽章:
1
2013年新春福章
日期:2013-02-25 14:51:24
发表于 2014-12-24 15:16 | 显示全部楼层
  1. SELECT  base.stu_name ,
  2.         base.lession_name ,
  3.         class_id
  4. FROM    ( SELECT    stu_id ,
  5.                     stu_name ,
  6.                     les.lession_id ,
  7.                     les.lession_name ,
  8.                     class_id
  9.           FROM      [t_lession] AS les
  10.                     CROSS JOIN [t_stu_profile] AS stu
  11.         ) AS base
  12.         LEFT JOIN t_score AS so ON base.lession_id = so.lession_id
  13.                                    AND base.stu_id = so.stu_id
  14. WHERE   score IS NULL
复制代码

使用道具 举报

回复
认证徽章
论坛徽章:
1
2013年新春福章
日期:2013-02-25 14:51:24
发表于 2014-12-24 15:22 | 显示全部楼层
第三题使用分析函数  lag,分组偏移量,与排序的上一个或下一个对比,形成另外一个列,具体可以百度,还是蛮简单的,BIEE这类报表很多地方环比同比机理都是这些分析函数,可以细细研究下

使用道具 举报

回复
认证徽章
论坛徽章:
41
生肖徽章:鼠
日期:2013-12-06 14:15:45生肖徽章:牛
日期:2013-12-06 14:15:45生肖徽章:虎
日期:2013-12-06 14:15:45生肖徽章:兔
日期:2013-12-06 14:15:45生肖徽章:龙
日期:2013-12-06 14:15:45生肖徽章:蛇
日期:2013-12-06 14:15:45生肖徽章:马
日期:2013-12-06 14:15:45生肖徽章:羊
日期:2013-12-06 14:15:45生肖徽章:猴
日期:2013-12-06 14:15:45生肖徽章:鸡
日期:2013-12-06 14:15:45
发表于 2014-12-24 15:24 | 显示全部楼层
jinaqu 发表于 2014-12-18 17:55
这是插数据的语句

这个SQL能插入到上表 , 自己试过么?

使用道具 举报

回复
论坛徽章:
8
2011新春纪念徽章
日期:2011-01-04 10:38:21ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:152013年新春福章
日期:2013-02-25 14:51:24ITPUB社区千里马徽章
日期:2013-06-09 10:15:34优秀写手
日期:2014-06-25 06:00:12懒羊羊
日期:2015-03-04 14:52:112015年新春福章
日期:2015-03-06 11:58:18
发表于 2014-12-24 16:57 | 显示全部楼层
同上,主键设置有问题,实验数据都插入不了

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时8.5折

【架构革新 高效可控】2020年6月4日~6日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表