[oracle/sql]写SQL从学生考试成绩三表中选出五门分综合超过720的尖子
任务:有学生,科目,考分三张表,需要从中筛选出五门考分总和超过720的学生。
科目表最简单只有五条记录:
- CREATE TABLE tb_course
- (
- id NUMBER not null primary key,
- name NVARCHAR2(10) not null
- )
- Insert into tb_course(id,name) values('','语文');
- Insert into tb_course(id,name) values('','数学');
- Insert into tb_course(id,name) values('','英语');
- Insert into tb_course(id,name) values('','物理');
- Insert into tb_course(id,name) values('','化学');
学生表只有两个字段,但数据量却有十万:
- CREATE TABLE tb_student
- (
- id NUMBER not null primary key,
- name NVARCHAR2(20) not null
- )
- Insert into tb_student
- select rownum,dbms_random.string('*',dbms_random.value(15,20)) from dual
- connect by level<=100000
- order by dbms_random.random
成绩表很庞大,需要在其中创建共两百万条数据:
- CREATE TABLE tb_score
- (
- id NUMBER not null primary key,
- studentid int not null,
- courseid int not null,
- score int not null
- )
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.
现在可否开始查询呢?还不行,我们需要把每个考生单科最高分数据遴选出来,放到一张新表中。
- create table tb_score2 as
- select * from tb_score where (studentid,courseid,score) in(
- select studentid,courseid,max(score) as score from tb_score
- group by studentid,courseid)
在我实验中,新表中约有49万数据,是原表的四分之一。
那么为什么不删除tb_score表中不是每个考生单科最高分那些记录呢,比如用下来的sql去删:
- delete from tb_score where id not in(
- select id from tb_score where (studentid,courseid,score) not in(
- select studentid,courseid,max(score) as score from tb_score
- group by studentid,courseid) )
是因为这样删除实在是太慢了,我浏览了百度新闻,51job首页和电影港首页居然还没完,选出数据放到新表会快得多。
然后用以下语句就能找出五门总分在720以上的学生:
- select stu.id,stu.name,sco.sumscore from tb_student stu,
- (select new_score.studentid,new_score.sumscore,new_score.cids from
- (select studentid,sum(score) as sumscore,(listagg(courseid,',') within group (order by courseid)) as cids from tb_score2
- group by studentid ) new_score where new_score.cids=(select listagg(id,',') within group (order by id) from tb_course)
- and new_score.sumscore>720 ) sco
- where stu.id=sco.studentid
- order by sco.sumscore desc
让我们看看这些英才都是哪些人:
- SQL> 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;
- ID NAME SUMSCORE
- ---------- ---------------------------------------- ----------
- 60230 MGHSGQWZZLWTMHAFCK 738
- 98913 FCIJHDBJDKUCLFTIOLR 737
- 19881 OWWHEDLATQLSUVXF 736
- 8711 UOAOGXWBATDMYBFM 736
- 26842 MUVPTHSTPNSKWSXIFAPP 735
- 58112 GOGZBZKYIZQBAYQS 735
- 42644 ZCWWQFSGOZMDFMS 735
- 42177 XDRUJHTZTOJVSFGI 734
- 56021 FBYUWGMGZORIQBXLTHO 733
- 65292 HUOUBIIWJNLAOGZW 733
- 87009 EBMPZNHSZMXMTSUC 732
- ID NAME SUMSCORE
- ---------- ---------------------------------------- ----------
- 83641 VKEKWTDNFDHXZRRPWIYD 731
- 58593 ZECIYJCZNYMUSNTG 731
- 32116 PZXWQZXAYLVAWNYG 729
- 97616 FGQGNKHTPDHHWOUU 729
- 74935 QNEHWSJTFLOSMXB 729
- 66747 WJURFLHNXQFDKNNOVT 729
- 49933 WGGGACVVJXXCODNLLB 729
- 23554 JKUNYBSSEKXQCVWE 728
- 55634 TCLLHZESREMRLIIWRUK 727
- 9387 EMYCJDHYLAXSGKE 726
- 93450 KQSBMYGSCRETYKYSYK 726
- ID NAME SUMSCORE
- ---------- ---------------------------------------- ----------
- 76314 NHOPFXSAYNKHSKHZJNY 726
- 76186 TXVXNSZETKCGLLX 726
- 61658 KSVTBNNAAJWZVVHP 726
- 33200 KJZXFGIDCJRRNKWNKG 726
- 84699 TDWMXMJRJTFCLGTC 726
- 86265 HBMIDMWVXMESKIIIQFPV 726
- 63956 MGPVABXLFQVKMKOQHN 725
- 33717 ABVGWFOAMIEQGIXIHBS 725
- 96610 OYOIJZGDXHWHTFNUDL 725
- 13104 KXCWLAUGOZSKQWTL 724
- 91912 MJYPLBSMWPEOLXUGGD 724
- ID NAME SUMSCORE
- ---------- ---------------------------------------- ----------
- 83508 IBNWASUMLVNLBXCURX 724
- 50997 YETMKRMKNAYMQQORGB 724
- 33868 WBXWDFIALHEAPPHKRAM 724
- 20391 RDHGEGGOIGVWTNJMJ 724
- 70595 SMVMJFVMDIYUNWYXC 724
- 8865 EYZZZGOAJNUENIXT 723
- 73241 DYMNRSECWZYLWFI 723
- 60378 YYQYSKIVBITGICD 723
- 13578 TLGLDLAYPRRCFTWQKRX 723
- 27338 HPAMAIQHHQNKDYJ 723
- 41174 HPMAFEVRCXEBVRRVEBYI 723
- ID NAME SUMSCORE
- ---------- ---------------------------------------- ----------
- 93860 VVXTQWGQGPEALAN 723
- 89181 AUAVRUBGTVEQISOBAFP 723
- 87519 MFOWKQSBTJVRJXX 723
- 83007 OZOYETVCZMJNXSIOSX 723
- 85947 DXSJSSMEMCJAIIGT 722
- 52919 FXELVCEHUAUMPHRKONX 722
- 94309 NTOCAERVSKNGLEZNIZ 722
- 34681 ZYOXMRWYYOVWONLNDR 722
- 30518 JNPYQNNWBPSKICREMPE 722
- 49635 MTJFGEKFQREYUQWPEWF 722
- 80760 LLHVLFAKXVSHTVYHOC 722
- ID NAME SUMSCORE
- ---------- ---------------------------------------- ----------
- 57707 SLYATRQZDXZYFVEM 722
- 18030 QZMPAWQKYISWWTSWM 722
- 74491 JLKIFEQCCLFCFIEFW 722
- 43296 VBLZPERIAXJYYYSTI 722
- 80816 IQSGRNLVHELBTSLGZ 722
- 92947 JHXVIRBODOUDZMMWP 722
- 5212 LCSFRFCWAFTLFPBWLU 721
- 9299 RUTLPLEFYYDVKLHPLK 721
- 10058 VBPVPMMAXRZIZLXHEI 721
- 10361 GBIXPYTHTZZWDPKW 721
- 15331 UMJLKKQHAKKBAOH 721
- ID NAME SUMSCORE
- ---------- ---------------------------------------- ----------
- 28393 LDLWTKPQSXLRWYN 721
- 39285 RIIBDINLLFXHETSPA 721
- 46517 TNUZAIUCZKWBFAGWEV 721
- 58569 ZINHWFNOOTQPEQOA 721
- 60567 UDECJDCGZIZZWUM 721
- 61563 SXBXGEBVXVNKSCWTUHLW 721
- 66670 XZYWNVSUWZWRYVYTVD 721
- 68668 FSAKVTSSBMYFPOSPSLG 721
- 91083 MGZJEJCGBSXEANPBHZK 721
- 92262 QKMPVBTYMXUVOGSAL 721
- 95418 QZQFIHRMNIGCDXSYHE 721
- ID NAME SUMSCORE
- ---------- ---------------------------------------- ----------
- 99418 HMKXSDFBGRETSZXYX 721
- 已选择78行。
2020年1月23日
[oracle/sql]写SQL从学生考试成绩三表中选出五门分综合超过720的尖子的更多相关文章
- 写sql语句统计各个学生各科成绩(case when用法)
尊重原创:http://blog.csdn.net/love_java_cc/article/details/78268326 有如下一张表score: 建表语句: CREATE TABLE `sco ...
- SQL 查询:查询学生平均成绩
编程萌新,因为遇到这么个SQL 查询的问题:在一张表A里有如下字段:学生姓名.学科名.学科成绩.写一条SQL 语句查出各科平均成绩并按学生姓名分组,按如下格式显示:学生姓名|语文|数学|英语.一开始遇 ...
- [置顶]
【机器学习PAI实践八】用机器学习算法评估学生考试成绩
(本文数据为实验用例) 一.背景 母亲是老师反而会对孩子的学习成绩造成不利影响?能上网的家庭,孩子通常能取得较好的成绩?影响孩子成绩的最大因素居然是母亲的学历?本文通过机器挖掘算法和中学真实的学生数据 ...
- [Oracle/SQL]找出id为0的科目考试成绩及格的学生名单的四种等效SQL语句
本文是受网文 <一次非常有意思的SQL优化经历:从30248.271s到0.001s>启发而产生的. 网文没讲创建表的数据过程,我帮他给出. 创建科目表及数据: CREATE TABLE ...
- 面试题: 数据库 sql优化 sql练习题 有用 学生表,课程表,成绩表,教师表 练习
什么是存储过程?有哪些优缺点? 什么是存储过程?有哪些优缺点? 存储过程就像我们编程语言中的函数一样,封装了我们的代码(PLSQL.T-SQL). 存储过程的优点: 能够将代码封装起来 保存在数据库之 ...
- sql面试题(学生表_课程表_成绩表_教师表)
原帖链接:http://bbs.csdn.net/topics/280002741 表架构 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程 ...
- sql面试题一 学生成绩
sql面试题一 学生成绩 原帖链接:http://topic.csdn.net/u/20081020/15/1ABF54D0-F401-42AB-A75E-DF90027CEBA0.html 表架 ...
- 经典sql面试题(学生表_课程表_成绩表_教师表)
转载:https://www.cnblogs.com/qixuejia/p/3637735.html 表架构 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cna ...
- Java使用JDBC连接SQL Server数据库|实现学生成绩信息系统
Java实验四 JDBC 使用SQL Server数据库或者MySQL数据库各自的客户端工具,完成如下任务: (1)创建数据库students: (2)在数据students中创建表scores,包括 ...
随机推荐
- Spring——AOP实现
Spring实现AOP 1.什么是 AOP AOP (Aspect Orient Programming),直译过来就是 面向切面编程.AOP 是一种编程思想,是面向对象编程(OOP)的一种补充.面向 ...
- flask_restful 的reqparse获取验证前端参数
required是设置必选非必选,nullable允不允许向传null,location指定参数获取的位置,可以多选,按前后顺序获取 parser.add_argument('app_id', typ ...
- 基于token的会话保持机制
session简介 做过Web开发的程序员应该对Session都比较熟悉,Session是一块保存在服务器端的内存空间,一般用于保存用户的会话信息. 用户通过用户名和密码登陆成功之后,服务器端程序会在 ...
- STM32 重启之后程序丢失
1 BOOT1 BOOT0都已经接10K接地,晶振波形正常 2 在主程序最开始运行的地方加入5秒的延时,程序不会丢失.原因可能为单片机其它外设没有准备好 int main(void) { delay_ ...
- 封装react antd的upload上传组件
上传文件也是我们在实际开发中常遇到的功能,比如上传产品图片以供更好地宣传我们的产品,上传excel文档以便于更好地展示更多的产品信息,上传zip文件以便于更好地收集一些资料信息等等.至于为何要把上传组 ...
- 【算法•日更•第二十三期】数据结构:two-pointer(尺取法)&莫队
▎引入 ☞『例题』 一道十分easy的题: 洛谷P1638 长度为n的序列,m种数 找一个最短区间,使得所有数出现一遍 n≤1e6 ,m≤2e3. ☞『分析』 这道题非常的简单,但是如果不会two-p ...
- 救救孩子吧,到现在还搞不懂TCP的三次握手四次挥手
本文在个人技术博客同步发布,详情可用力戳 亦可扫描屏幕右侧二维码关注个人公众号,公众号内有个人联系方式,等你来撩... 前几天发了一个朋友圈,发现暗恋已久的女生给我点了个赞,于是我当晚辗转反侧.彻 ...
- Oracle数据库安装教程
一.准备文件 Oracle安装程序(64位)下载地址: http://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_database_ ...
- MySQL · 性能优化 · MySQL常见SQL错误用法(转自-阿里云云栖社区)
作者:阿里云云栖社区链接:https://zhuanlan.zhihu.com/p/26043916来源:知乎著作权归作者所有,转载请联系作者获得授权. 前言 MySQL在2016年仍然保持强劲的数据 ...
- 介绍 golang json数据的处理
原文链接:https://blog.csdn.net/weixin_43223076/article/details/83550229 demo1: package main import ( &qu ...