楼主: jinaqu

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

[复制链接]
认证徽章
论坛徽章:
3
优秀写手
日期:2014-11-11 06:00:15沸羊羊
日期:2015-03-04 14:55:412015年新春福章
日期:2015-03-06 11:59:47
发表于 2014-12-29 09:12 | 显示全部楼层
hitech560 发表于 2014-12-29 06:44
表 t_score 的字段 stu_id 不应该是 primary key吧。

哦哦。为何????

使用道具 举报

回复
论坛徽章:
27
双黄蛋
日期:2014-08-07 11:00:12红孩儿
日期:2015-01-09 11:06:52茶鸡蛋
日期:2015-01-09 11:14:31红宝石
日期:2015-02-03 10:25:36至尊黑钻
日期:2015-02-15 09:48:30至尊黑钻
日期:2015-02-15 09:49:11慢羊羊
日期:2015-03-04 14:53:332015年新春福章
日期:2015-03-06 11:58:39暖羊羊
日期:2015-03-10 08:55:43慢羊羊
日期:2015-04-22 15:14:26
发表于 2015-1-15 17:05 | 显示全部楼层
jinaqu 发表于 2014-12-29 09:12
哦哦。为何????

原因:t_score表结构的primary key和后续的insert语句矛盾有主键冲突
另外
第二题,稍加改动:

  1. SELECT max(lession_name) "课程",
  2.        max(decode(rn,1,stu_name||'+'||to_char(score))) "第一名(姓名+分数) ",
  3.        max(decode(rn,2,stu_name||'+'||to_char(score))) "第二名(姓名+分数) ",
  4.        max(decode(rn,3,stu_name||'+'||to_char(score))) "第三名(姓名+分数) "
  5. FROM (SELECT t1.stu_name,
  6.              t2.lession_name,
  7.              t.score,
  8.              row_number() over (PARTITION BY t.lession_id ORDER BY t.score DESC) rn
  9.             FROM t_score t, t_stu_profile t1, t_lession t2
  10.             WHERE t1.stu_id = t.stu_id
  11.             AND t2.lession_id = t.lession_id
  12.             ORDER BY t.lession_id, rn) a
  13. WHERE  rn <= 3
  14. GROUP BY lession_name
  15. ORDER BY lession_name
  16. ;
复制代码

使用道具 举报

回复
论坛徽章:
3
2013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2015-01-14 06:00:06优秀写手
日期:2015-02-12 06:00:15
发表于 2015-1-16 09:38 | 显示全部楼层
1).写出学生没有参加考试的课程,以下形式显示 ,我写的SQL
select A.STU_NAME, A.CLASS_ID, B.LESSION_NAME from t_stu_profile A, t_lession B WHERE (A.STU_ID,B.LESSION_ID) NOT IN (select STU_ID, LESSION_ID from t_score)

使用道具 举报

回复
论坛徽章:
3
2013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2015-01-14 06:00:06优秀写手
日期:2015-02-12 06:00:15
发表于 2015-1-16 10:18 | 显示全部楼层
B.2.        找出课程的前三名,以下列形式显示 ,做得有点费力哦

select a1.lession_id, MAX(a1.第一名), MAX(a1.第二名), MAX(a1.第三名) from
(
SELECT A.LESSION_ID,
(CASE WHEN ORDER_ID=1 THEN STU_NAME||SCORE ELSE '' END) 第一名,
(CASE WHEN ORDER_ID=2 THEN STU_NAME||SCORE ELSE '' END) 第二名,
(CASE WHEN ORDER_ID=3 THEN STU_NAME||SCORE ELSE '' END) 第三名
FROM
(
select T.STU_ID,X.STU_NAME, T.LESSION_ID, Y.LESSION_NAME,T.SCORE, ROW_NUMBER() OVER (PARTITION BY T.LESSION_ID ORDER BY T.LESSION_ID) ORDER_ID from t_score T, t_stu_profile X, t_lession Y
WHERE T.STU_ID=X.STU_ID AND T.LESSION_ID=Y.LESSION_ID
) A
)a1 GROUP BY a1.lession_id

使用道具 举报

回复
认证徽章
论坛徽章:
91
秀才
日期:2015-11-02 11:24:03秀才
日期:2017-12-12 10:00:50秀才
日期:2017-09-18 17:34:47秀才
日期:2017-09-18 17:02:592017金鸡报晓
日期:2017-02-08 14:09:132017金鸡报晓
日期:2017-01-10 15:39:05秀才
日期:2016-12-21 16:55:07ITPUB15周年纪念
日期:2016-10-06 10:54:102016猴年福章
日期:2016-02-23 09:58:342016猴年福章
日期:2016-02-18 09:31:30
发表于 2015-1-18 21:22 | 显示全部楼层
好东西,mark一下,研究一下。

使用道具 举报

回复
认证徽章
论坛徽章:
3
优秀写手
日期:2014-11-11 06:00:15沸羊羊
日期:2015-03-04 14:55:412015年新春福章
日期:2015-03-06 11:59:47
发表于 2015-1-19 09:25 | 显示全部楼层
这些东东都是面试的时候,面试官随便出的,有点措手不及,并且当时没有电脑,只能写在纸上,大家好好研究研究吧,哈哈

使用道具 举报

回复
论坛徽章:
526
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
发表于 2015-1-20 04:43 | 显示全部楼层
jinaqu 发表于 2015-1-19 09:25
这些东东都是面试的时候,面试官随便出的,有点措手不及,并且当时没有电脑,只能写在纸上,大家好好研究研 ...

他随便说说你都能记得住?

使用道具 举报

回复
论坛徽章:
533
生肖徽章2007版:猴
日期:2008-05-16 11:28:59生肖徽章2007版:马
日期:2008-10-08 17:01:01SQL大赛参与纪念
日期:2011-04-13 12:08:17授权会员
日期:2011-06-17 16:14:53ITPUB元老
日期:2011-06-21 11:47:01ITPUB官方微博粉丝徽章
日期:2011-07-01 09:45:27ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:51:22海蓝宝石
日期:2012-02-20 19:24:27铁扇公主
日期:2012-02-21 15:03:13
发表于 2015-1-23 10:16 | 显示全部楼层
SQL>
SQL> create table t_score(stu_id varchar2(3),lession_id varchar2(4),score number);

Table created
SQL> insert into t_score values('001',        'L001',        90);

1 row inserted
SQL> insert into t_score values('001',        'L002',        86);

1 row inserted
SQL> insert into t_score values('002',        'L001',        84);

1 row inserted
SQL> insert into t_score values('002',        'L004',        75);

1 row inserted
SQL> insert into t_score values('003',        'L003',        85);

1 row inserted
SQL> insert into t_score values('004',        'L005',        98);

1 row inserted
SQL> commit;

Commit complete
SQL> create table t_stu_profile(stu_id varchar2(3),stu_name varchar2(12),sex varchar2(1),age number,class_id varchar2(4));

Table created
SQL> insert into t_stu_profile values('001',        '郭东',        'F',        16,        '0611');

1 row inserted
SQL> insert into t_stu_profile values('002',        '李西',        'M',        18,        '0612');

1 row inserted
SQL> insert into t_stu_profile values('003',        '张北',        'F',        16,        '0613');

1 row inserted
SQL> insert into t_stu_profile values('004',        '钱南',        'M',        17,        '0611');

1 row inserted
SQL> insert into t_stu_profile values('005',        '王五',        'F',        17,        '0614');

1 row inserted
SQL> insert into t_stu_profile values('006',        '赵七',        'F',        16,        '0615');

1 row inserted
SQL> commit;

Commit complete
SQL> create table t_lession(lession_id varchar2(4),lession_name varchar2(8));

Table created
SQL> insert into t_lession values('L001',        '语文');

1 row inserted
SQL> insert into t_lession values('L002',        '数学');

1 row inserted
SQL> insert into t_lession values('L003',        '英语');

1 row inserted
SQL> insert into t_lession values('L004',        '物理');

1 row inserted
SQL> insert into t_lession values('L005',        '化学');

1 row inserted
SQL> commit;

Commit complete

SQL>
SQL> select d.stu_name,d.class_id,d.lession_name
  2    from (
  3          select a.stu_id,
  4                 a.stu_name,
  5                 a.class_id,
  6                 b.lession_id,
  7                 b.lession_name
  8            from t_stu_profile a,
  9                 t_lession     b
10          ) d,
11          t_score c
12   where d.stu_id     = c.stu_id     (+)
13     and d.lession_id = c.lession_id (+)
14     and c.lession_id is null
15   order by d.stu_id,d.class_id,d.lession_id;

STU_NAME     CLASS_ID LESSION_NAME
------------ -------- ------------
郭东         0611     英语
郭东         0611     物理
郭东         0611     化学
李西         0612     数学
李西         0612     英语
李西         0612     化学
张北         0613     语文
张北         0613     数学
张北         0613     物理
张北         0613     化学
钱南         0611     语文
钱南         0611     数学
钱南         0611     英语
钱南         0611     物理
王五         0614     语文
王五         0614     数学
王五         0614     英语
王五         0614     物理
王五         0614     化学
赵七         0615     语文

STU_NAME     CLASS_ID LESSION_NAME
------------ -------- ------------
赵七         0615     数学
赵七         0615     英语
赵七         0615     物理
赵七         0615     化学

24 rows selected

SQL>

使用道具 举报

回复
论坛徽章:
142
秀才
日期:2016-01-06 14:01:09秀才
日期:2016-02-18 10:06:46秀才
日期:2016-02-18 10:08:02秀才
日期:2016-02-18 10:08:14秀才
日期:2016-03-01 09:57:08天蝎座
日期:2016-03-18 14:23:56秀才
日期:2016-03-24 09:10:24秀才
日期:2016-03-24 09:20:52秀才
日期:2016-04-21 14:08:53秀才
日期:2016-04-21 14:11:59
发表于 2015-1-23 10:24 | 显示全部楼层
恭喜!您刚拣到ITPUB送出的 马上有房 。

使用道具 举报

回复
认证徽章
论坛徽章:
3
优秀写手
日期:2014-11-11 06:00:15沸羊羊
日期:2015-03-04 14:55:412015年新春福章
日期:2015-03-06 11:59:47
发表于 2015-2-4 09:06 | 显示全部楼层
newkid 发表于 2015-1-20 04:43
他随便说说你都能记得住?

嗯,只记得几个印象深的,当场是要在纸上做出来的,并且还需要说出思路

使用道具 举报

回复

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

本版积分规则 发表回复

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号
  
快速回复 返回顶部 返回列表