任务:有学生,科目,考分三张表,需要从中筛选出五门考分总和超过720的学生。

科目表最简单只有五条记录:

  1. CREATE TABLE tb_course
  2. (
  3. id NUMBER not null primary key,
  4. name NVARCHAR2(10) not null
  5. )
  6.  
  7. Insert into tb_course(id,name) values('','语文');
  8. Insert into tb_course(id,name) values('','数学');
  9. Insert into tb_course(id,name) values('','英语');
  10. Insert into tb_course(id,name) values('','物理');
  11. Insert into tb_course(id,name) values('','化学');

学生表只有两个字段,但数据量却有十万:

  1. CREATE TABLE tb_student
  2. (
  3. id NUMBER not null primary key,
  4. name NVARCHAR2(20) not null
  5. )
  6.  
  7. Insert into tb_student
  8. select rownum,dbms_random.string('*',dbms_random.value(15,20)) from dual
  9. connect by level<=100000
  10. order by dbms_random.random

成绩表很庞大,需要在其中创建共两百万条数据:

  1. CREATE TABLE tb_score
  2. (
  3. id NUMBER not null primary key,
  4. studentid int not null,
  5. courseid int not null,
  6. score int not null
  7. )

Insert into tb_score
select rownum,dbms_random.value(0,100000),dbms_random.value(1,5),dbms_random.value(0,150) from dual
connect by level<=2000000
order by dbms_random.random

执行完毕以后commit.

现在可否开始查询呢?还不行,我们需要把每个考生单科最高分数据遴选出来,放到一张新表中。

  1. create table tb_score2 as
  2. select * from tb_score where (studentid,courseid,score) in(
  3. select studentid,courseid,max(score) as score from tb_score
  4. group by studentid,courseid)

在我实验中,新表中约有49万数据,是原表的四分之一。

那么为什么不删除tb_score表中不是每个考生单科最高分那些记录呢,比如用下来的sql去删:

  1. delete from tb_score where id not in(
  2. select id from tb_score where (studentid,courseid,score) not in(
  3. select studentid,courseid,max(score) as score from tb_score
  4. group by studentid,courseid) )

是因为这样删除实在是太慢了,我浏览了百度新闻,51job首页和电影港首页居然还没完,选出数据放到新表会快得多。

然后用以下语句就能找出五门总分在720以上的学生:

  1. select stu.id,stu.name,sco.sumscore from tb_student stu,
  2. (select new_score.studentid,new_score.sumscore,new_score.cids from
  3. (select studentid,sum(score) as sumscore,(listagg(courseid,',') within group (order by courseid)) as cids from tb_score2
  4. group by studentid ) new_score where new_score.cids=(select listagg(id,',') within group (order by id) from tb_course)
  5. and new_score.sumscore>720 ) sco
  6. where stu.id=sco.studentid
  7. order by sco.sumscore desc

让我们看看这些英才都是哪些人:

  1. SQL> select stu.id,stu.name,sco.sumscore from tb_student stu,
  2. 2 (select new_score.studentid,new_score.sumscore,new_score.cids from
  3. 3 (select studentid,sum(score) as sumscore,(listagg(courseid,',') within group (order by courseid)) as cids from tb_score2
  4. 4 group by studentid ) new_score where new_score.cids=(select listagg(id,',') within group (order by id) from tb_course)
  5. 5 and new_score.sumscore>720 ) sco
  6. 6 where stu.id=sco.studentid
  7. 7 order by sco.sumscore desc;
  8.  
  9. ID NAME SUMSCORE
  10. ---------- ---------------------------------------- ----------
  11. 60230 MGHSGQWZZLWTMHAFCK 738
  12. 98913 FCIJHDBJDKUCLFTIOLR 737
  13. 19881 OWWHEDLATQLSUVXF 736
  14. 8711 UOAOGXWBATDMYBFM 736
  15. 26842 MUVPTHSTPNSKWSXIFAPP 735
  16. 58112 GOGZBZKYIZQBAYQS 735
  17. 42644 ZCWWQFSGOZMDFMS 735
  18. 42177 XDRUJHTZTOJVSFGI 734
  19. 56021 FBYUWGMGZORIQBXLTHO 733
  20. 65292 HUOUBIIWJNLAOGZW 733
  21. 87009 EBMPZNHSZMXMTSUC 732
  22.  
  23. ID NAME SUMSCORE
  24. ---------- ---------------------------------------- ----------
  25. 83641 VKEKWTDNFDHXZRRPWIYD 731
  26. 58593 ZECIYJCZNYMUSNTG 731
  27. 32116 PZXWQZXAYLVAWNYG 729
  28. 97616 FGQGNKHTPDHHWOUU 729
  29. 74935 QNEHWSJTFLOSMXB 729
  30. 66747 WJURFLHNXQFDKNNOVT 729
  31. 49933 WGGGACVVJXXCODNLLB 729
  32. 23554 JKUNYBSSEKXQCVWE 728
  33. 55634 TCLLHZESREMRLIIWRUK 727
  34. 9387 EMYCJDHYLAXSGKE 726
  35. 93450 KQSBMYGSCRETYKYSYK 726
  36.  
  37. ID NAME SUMSCORE
  38. ---------- ---------------------------------------- ----------
  39. 76314 NHOPFXSAYNKHSKHZJNY 726
  40. 76186 TXVXNSZETKCGLLX 726
  41. 61658 KSVTBNNAAJWZVVHP 726
  42. 33200 KJZXFGIDCJRRNKWNKG 726
  43. 84699 TDWMXMJRJTFCLGTC 726
  44. 86265 HBMIDMWVXMESKIIIQFPV 726
  45. 63956 MGPVABXLFQVKMKOQHN 725
  46. 33717 ABVGWFOAMIEQGIXIHBS 725
  47. 96610 OYOIJZGDXHWHTFNUDL 725
  48. 13104 KXCWLAUGOZSKQWTL 724
  49. 91912 MJYPLBSMWPEOLXUGGD 724
  50.  
  51. ID NAME SUMSCORE
  52. ---------- ---------------------------------------- ----------
  53. 83508 IBNWASUMLVNLBXCURX 724
  54. 50997 YETMKRMKNAYMQQORGB 724
  55. 33868 WBXWDFIALHEAPPHKRAM 724
  56. 20391 RDHGEGGOIGVWTNJMJ 724
  57. 70595 SMVMJFVMDIYUNWYXC 724
  58. 8865 EYZZZGOAJNUENIXT 723
  59. 73241 DYMNRSECWZYLWFI 723
  60. 60378 YYQYSKIVBITGICD 723
  61. 13578 TLGLDLAYPRRCFTWQKRX 723
  62. 27338 HPAMAIQHHQNKDYJ 723
  63. 41174 HPMAFEVRCXEBVRRVEBYI 723
  64.  
  65. ID NAME SUMSCORE
  66. ---------- ---------------------------------------- ----------
  67. 93860 VVXTQWGQGPEALAN 723
  68. 89181 AUAVRUBGTVEQISOBAFP 723
  69. 87519 MFOWKQSBTJVRJXX 723
  70. 83007 OZOYETVCZMJNXSIOSX 723
  71. 85947 DXSJSSMEMCJAIIGT 722
  72. 52919 FXELVCEHUAUMPHRKONX 722
  73. 94309 NTOCAERVSKNGLEZNIZ 722
  74. 34681 ZYOXMRWYYOVWONLNDR 722
  75. 30518 JNPYQNNWBPSKICREMPE 722
  76. 49635 MTJFGEKFQREYUQWPEWF 722
  77. 80760 LLHVLFAKXVSHTVYHOC 722
  78.  
  79. ID NAME SUMSCORE
  80. ---------- ---------------------------------------- ----------
  81. 57707 SLYATRQZDXZYFVEM 722
  82. 18030 QZMPAWQKYISWWTSWM 722
  83. 74491 JLKIFEQCCLFCFIEFW 722
  84. 43296 VBLZPERIAXJYYYSTI 722
  85. 80816 IQSGRNLVHELBTSLGZ 722
  86. 92947 JHXVIRBODOUDZMMWP 722
  87. 5212 LCSFRFCWAFTLFPBWLU 721
  88. 9299 RUTLPLEFYYDVKLHPLK 721
  89. 10058 VBPVPMMAXRZIZLXHEI 721
  90. 10361 GBIXPYTHTZZWDPKW 721
  91. 15331 UMJLKKQHAKKBAOH 721
  92.  
  93. ID NAME SUMSCORE
  94. ---------- ---------------------------------------- ----------
  95. 28393 LDLWTKPQSXLRWYN 721
  96. 39285 RIIBDINLLFXHETSPA 721
  97. 46517 TNUZAIUCZKWBFAGWEV 721
  98. 58569 ZINHWFNOOTQPEQOA 721
  99. 60567 UDECJDCGZIZZWUM 721
  100. 61563 SXBXGEBVXVNKSCWTUHLW 721
  101. 66670 XZYWNVSUWZWRYVYTVD 721
  102. 68668 FSAKVTSSBMYFPOSPSLG 721
  103. 91083 MGZJEJCGBSXEANPBHZK 721
  104. 92262 QKMPVBTYMXUVOGSAL 721
  105. 95418 QZQFIHRMNIGCDXSYHE 721
  106.  
  107. ID NAME SUMSCORE
  108. ---------- ---------------------------------------- ----------
  109. 99418 HMKXSDFBGRETSZXYX 721
  110.  
  111. 已选择78行。

2020年1月23日

[oracle/sql]写SQL从学生考试成绩三表中选出五门分综合超过720的尖子的更多相关文章

  1. 写sql语句统计各个学生各科成绩(case when用法)

    尊重原创:http://blog.csdn.net/love_java_cc/article/details/78268326 有如下一张表score: 建表语句: CREATE TABLE `sco ...

  2. SQL 查询:查询学生平均成绩

    编程萌新,因为遇到这么个SQL 查询的问题:在一张表A里有如下字段:学生姓名.学科名.学科成绩.写一条SQL 语句查出各科平均成绩并按学生姓名分组,按如下格式显示:学生姓名|语文|数学|英语.一开始遇 ...

  3. [置顶] 【机器学习PAI实践八】用机器学习算法评估学生考试成绩

    (本文数据为实验用例) 一.背景 母亲是老师反而会对孩子的学习成绩造成不利影响?能上网的家庭,孩子通常能取得较好的成绩?影响孩子成绩的最大因素居然是母亲的学历?本文通过机器挖掘算法和中学真实的学生数据 ...

  4. [Oracle/SQL]找出id为0的科目考试成绩及格的学生名单的四种等效SQL语句

    本文是受网文 <一次非常有意思的SQL优化经历:从30248.271s到0.001s>启发而产生的. 网文没讲创建表的数据过程,我帮他给出. 创建科目表及数据: CREATE TABLE ...

  5. 面试题: 数据库 sql优化 sql练习题 有用 学生表,课程表,成绩表,教师表 练习

    什么是存储过程?有哪些优缺点? 什么是存储过程?有哪些优缺点? 存储过程就像我们编程语言中的函数一样,封装了我们的代码(PLSQL.T-SQL). 存储过程的优点: 能够将代码封装起来 保存在数据库之 ...

  6. sql面试题(学生表_课程表_成绩表_教师表)

    原帖链接:http://bbs.csdn.net/topics/280002741 表架构 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程 ...

  7. sql面试题一 学生成绩

    sql面试题一 学生成绩   原帖链接:http://topic.csdn.net/u/20081020/15/1ABF54D0-F401-42AB-A75E-DF90027CEBA0.html 表架 ...

  8. 经典sql面试题(学生表_课程表_成绩表_教师表)

    转载:https://www.cnblogs.com/qixuejia/p/3637735.html 表架构 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cna ...

  9. Java使用JDBC连接SQL Server数据库|实现学生成绩信息系统

    Java实验四 JDBC 使用SQL Server数据库或者MySQL数据库各自的客户端工具,完成如下任务: (1)创建数据库students: (2)在数据students中创建表scores,包括 ...

随机推荐

  1. Spring——AOP实现

    Spring实现AOP 1.什么是 AOP AOP (Aspect Orient Programming),直译过来就是 面向切面编程.AOP 是一种编程思想,是面向对象编程(OOP)的一种补充.面向 ...

  2. flask_restful 的reqparse获取验证前端参数

    required是设置必选非必选,nullable允不允许向传null,location指定参数获取的位置,可以多选,按前后顺序获取 parser.add_argument('app_id', typ ...

  3. 基于token的会话保持机制

    session简介 做过Web开发的程序员应该对Session都比较熟悉,Session是一块保存在服务器端的内存空间,一般用于保存用户的会话信息. 用户通过用户名和密码登陆成功之后,服务器端程序会在 ...

  4. STM32 重启之后程序丢失

    1 BOOT1 BOOT0都已经接10K接地,晶振波形正常 2 在主程序最开始运行的地方加入5秒的延时,程序不会丢失.原因可能为单片机其它外设没有准备好 int main(void) { delay_ ...

  5. 封装react antd的upload上传组件

    上传文件也是我们在实际开发中常遇到的功能,比如上传产品图片以供更好地宣传我们的产品,上传excel文档以便于更好地展示更多的产品信息,上传zip文件以便于更好地收集一些资料信息等等.至于为何要把上传组 ...

  6. 【算法•日更•第二十三期】数据结构:two-pointer(尺取法)&莫队

    ▎引入 ☞『例题』 一道十分easy的题: 洛谷P1638 长度为n的序列,m种数 找一个最短区间,使得所有数出现一遍 n≤1e6 ,m≤2e3. ☞『分析』 这道题非常的简单,但是如果不会two-p ...

  7. 救救孩子吧,到现在还搞不懂TCP的三次握手四次挥手

    本文在个人技术博客同步发布,详情可用力戳 亦可扫描屏幕右侧二维码关注个人公众号,公众号内有个人联系方式,等你来撩...   前几天发了一个朋友圈,发现暗恋已久的女生给我点了个赞,于是我当晚辗转反侧.彻 ...

  8. Oracle数据库安装教程

    一.准备文件 Oracle安装程序(64位)下载地址: http://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_database_ ...

  9. MySQL · 性能优化 · MySQL常见SQL错误用法(转自-阿里云云栖社区)

    作者:阿里云云栖社区链接:https://zhuanlan.zhihu.com/p/26043916来源:知乎著作权归作者所有,转载请联系作者获得授权. 前言 MySQL在2016年仍然保持强劲的数据 ...

  10. 介绍 golang json数据的处理

    原文链接:https://blog.csdn.net/weixin_43223076/article/details/83550229 demo1: package main import ( &qu ...