mysql:如图:sql语句应该怎么查其中一门科目的最高分、最低分,平均得分等

武小凡 2018-01-05 08:32:28

如图:sql语句应该怎么根据其中的一个考试时间,查其中一门科目的总人数、评价差的人数和占比,评价中等的人数和占比,评价良好的人数和占比。最高分、最低分,平均得分,得分差。
还有就是怎么根据民族、年龄或者班级。然后根据其中的一个参考时间,查询每一个民族或者每一个年龄或者每一个班级的评价差的人数和占比,评价中等的人数和占比,评价良好的人数和占比。
...全文
1363 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
武小凡 2018-01-05
  • 打赏
  • 举报
回复
引用 3 楼 wuxiao_fan 的回复:
[quote=引用 1 楼 qq_38445797 的回复:] select count(1) as ALL, -- 总人数 (select count(1) from '学生考试表' as a left join '学生表' as b on a.学生ID=b.idwhere a.考试时间='期中考试' WHERE 评价='差') AS badboy, -- 差的人数 badboy/ALL as percent -- 百分比 from '学生考试表' as a left join '学生表' as b on a.学生ID=b.id where a.考试时间='期中考试';
这里只有差的人数和百分比。那中等的和优秀的人数和百分比,最高分、最低分,平均分和得分差。这个该怎么写啊? 还有就是,按照民族或者班级或者年龄。去查其中一个考试时间的各个评价的人数和百分比。 [/quote] 我比较菜
qq_38445797 2018-01-05
  • 打赏
  • 举报
回复
你要明白你查的东西需要做几步,分开做就好了
qq_38445797 2018-01-05
  • 打赏
  • 举报
回复
select * from '学生考试表' as a left join '学生表' as b on a.学生ID=b.id -- 查询全部。 select count(1) as ALL, -- 总人数 (select count(1) from '学生考试表' as a left join '学生表' as b on a.学生ID=b.idwhere a.考试时间='期中考试' WHERE 评价='差') AS badboy, -- 差的人数 badboy/ALL as percent, -- 差的人数的百分比 (select count(1) from '学生考试表' as a left join '学生表' as b on a.学生ID=b.idwhere a.考试时间='期中考试' WHERE 评价='中等') AS middleboy, -- 中等人数 middleboy/ALL as percent, -- 中等人数百分比 (select count(1) from '学生考试表' as a left join '学生表' as b on a.学生ID=b.idwhere a.考试时间='期中考试' WHERE 评价='优秀') AS goodboy, -- 差的人数 goodboy/ALL as percent, -- 优秀人数的百分比 MAX(a.成绩) as maxscore, -- 最高分 MIN(a.成绩) as minscore, -- 最低分 AVG(a.成绩) as avgscore -- 平均分 from '学生考试表' as a left join '学生表' as b on a.学生ID=b.id where a.考试时间='期中考试'; 这不都是一样的吗。。。你要查啥就加一行就是了啊。
武小凡 2018-01-05
  • 打赏
  • 举报
回复
引用 1 楼 qq_38445797 的回复:
select count(1) as ALL, -- 总人数 (select count(1) from '学生考试表' as a left join '学生表' as b on a.学生ID=b.idwhere a.考试时间='期中考试' WHERE 评价='差') AS badboy, -- 差的人数 badboy/ALL as percent -- 百分比 from '学生考试表' as a left join '学生表' as b on a.学生ID=b.id where a.考试时间='期中考试';
这里只有差的人数和百分比。那中等的和优秀的人数和百分比,最高分、最低分,平均分和得分差。这个该怎么写啊? 还有就是,按照民族或者班级或者年龄。去查其中一个考试时间的各个评价的人数和百分比。
qq_38445797 2018-01-05
  • 打赏
  • 举报
回复
表就不要用汉字了吧。。
qq_38445797 2018-01-05
  • 打赏
  • 举报
回复
select count(1) as ALL, -- 总人数 (select count(1) from '学生考试表' as a left join '学生表' as b on a.学生ID=b.idwhere a.考试时间='期中考试' WHERE 评价='差') AS badboy, -- 差的人数 badboy/ALL as percent -- 百分比 from '学生考试表' as a left join '学生表' as b on a.学生ID=b.id where a.考试时间='期中考试';
此为吉林大学数据库的实验报告,实验内容为: 实验一 熟悉MySQL环境及SQL定义语言 一、实验目的: 1. 了解MySQL程序构成、安装、管理方法。 2. 了解MySQL数据库及表结构。 3. 熟练掌握SQL语言进行基本表结构的创建。 4. 熟练应用SQL语言进行表结构的修改。 5. 掌握SQL语言进行基本表的删除。 6. 掌握SQL语言进行索引的建立和删除。 二、实验内容和主要步骤: 1. 参考“MYSQL简体中文参考文档.chm”,熟悉MySQL构成和功能特性。 2. 打开Windows服务管理器,实验启动、停止MySQL服务,了解MySQL的服务管理方法; 3. 打开“MySQL管理控制台.bat”,熟悉控制台中操作数据库; 4. 利用控制台创建“Student数据库”。 5. 打开“Student”数据库,创建如下三个表,按下面的列表中的字段名(英文)、类型和宽度建立: 7. 用SQL语言CREATE TABLE语句创建学生表student、课程表course和选课表SC;(字段类型及长度参照实验一) 8. 用SQL语言ALTER语句修改表结构; a) STUDENT表中SNO设为非空和唯一; b) STUDENT表中增加一个字段SBIRTH,类型设置为日期时间类型,增加一个ADDRESS字段,类型为文本(字符); c) 删除STUDENT表中ADDRESS字段; d) COURSE表中CNO字段设为非空和唯一; 9. 重新定义一个简单表,然后用SQL语言DROP语句删除该表结构; 10. 用SQL语言CREATE INDEX语句定义表STUDENT的SNAME字段的降序索引; 11. 用SQL语言CREATE INDEX语句定义表SC的GRADE字段的升序索引; 12. 用SQL语言DROP语句删除索引; 13. 输入部数据,并试着修改其中的错误; 注: 实验二 SQL语言进行简单询 一、实验目的: 1. 掌握SQL询语句的一般格式 2. 掌握简单数据询操作。 3. 熟练掌握各种询条件的表示。 4. 掌握排序和组操作在SQL语句中的实现。 5. 掌握集函数的使用。 二、实验内容和主要步骤: 1. 创建学生表student、课程表course和选课表SC,并输入数据(注意数据的完整性。);(可以使用实验一中已经建立的表和数据) 2. 对各表中的数据进行不同条件的询; 1) 询全体学生的学号和姓名 2) 询全体学生的详细记录 3) 询所有选修过课程的学生学号 4) 询考试有不及格的学生学号 5) 询不是信息系(IS)、计算机系(CS)的学生性别、年龄、系别 6) 询选修了4号课的学生学号和成绩,结果按成绩降序排列 7) 询每个课程号和相应的选课人数 8) 询计算机系(CS)的学生姓名、年龄、系别 9) 询年龄18-20岁的学生学号、姓名、系别、年龄; 10) 询姓刘的学生情况 11) 询既选修1号课程,又选修2号课程的学生学号 12) 询学生的姓名和出生年份(今年2003年) 13) 询没有成绩的学生学号和课程号 14) 询总成绩大于200的学生学号 15) 询每门课程不及格学生人数 16) 询不及格课程超过3门的学生学号 17) 询年龄在10到19岁之间的学生信息 18) 询全体学生情况,按所在系升序排列,同一个系的学生按年龄降序排列 19) 询选了1号课程的学生平均成绩 20) 询选了3号课程的学生的最高 21) 询每个同学的总成绩 实验三 SQL进行复杂询 一、实验目的: 1. 熟练掌握各种连接询及其连接条件。 2. 掌握各种嵌套询的使用。 3. 掌握复杂的集合询。 二、内容和主要步骤: 1.实验一中的数据为基础 2.对各表中的数据进行不同条件的连接询和嵌套询; 1) 询每个学生及其选课情况; 2) 询每门课的间接先修课 3) 将STUDENT,SC进行右连接 4) 询有不及格的学生姓名和所在系 5) 询所有成绩为优秀(大于90)的学生姓名 6) 询既选修了2号课程又选修了3号课程的学生姓名、学号; 7) 询和刘晨同一年龄的学生 8) 选修了课程名为“数据库”的学生姓名和年龄 9) 询其他系比IS系任一学生年龄小的学生名单 10) 询其他系中比IS系所有学生年龄都小的学生名单 11) 询选修了全部课程的学生姓名 12) 询计算机系学生及其性别是男的学生 13) 询选修课程1的学生集合和选修2号课程学生集合的差集 14) 询李丽同学不学的课程的课程号 15) 询选修了3号课程的学生平均年龄 16) 求每门课程学生的平均成绩 17) 统计每门课程的学生选修人数(超过3人的才统计)。要求输出课程号和选修人数,结果按人数降序排列,若人数相同,按课程号升序排列 18) 询学号比刘晨大,而年龄比他小的学生姓名。 19) 求年龄大于女同学平均年龄的男同学姓名和年龄 20) 求年龄大于所有女同学年龄的男同学姓名和年龄 21) 询至少选修了95002选修的全部课程的学生号码 22) 询95001和95002两个学生都选修的课程的信息 实验四 SQL的常用数据更新操作 一、实验目的: 1. 熟练掌握SQL的常用数据更新操作。 2. 熟练应用INSERT,UPDATE,DELETE语句。 3. 掌握更新操作的各种格式。 二、实验内容和主要步骤 1. 应用INSERT,UPDATE,DELETE语句进行更新操作; 1) 插入如下学生记录(学号:95030,姓名:李莉,年龄:18) 2) 插入如下选课记录(95030,1) 3) 计算机系学生年龄改成20 4) 数学系所有学生成绩改成0 5) 把低于总平均成绩的女同学成绩提高5 6) 修改2号课程的成绩,若成绩小于75提高5%,成绩大于75时提高 7) 4%(两个语句实现,注意顺序) 8) 删除95030学生信息 9) 删除SC表中无成绩的记录 10) 删除张娜的选课记录 11) 删除数学系所有学生选课记录 12) 删除不及格的学生选课记录 13) 询每一门课程成绩都大于等于80的学生学号、姓名和性别,把值送往另一个已经存在的基本表STU(SNO,SNAME,SSEX)中 14) 把所有学生学号和课程号连接追加到新表中 15) 所有学生年龄增1 16) 统计3门以上课程不及格的学生把相应的学生姓名、系别追加到另外一个表中 2.熟练掌握INSERT,UPDATE,DELETE语句并能综合应用;
--3、平均成绩大于等于60的同学的学生编号和学生姓名和平均成绩 --4、平均成绩小于60的同学的学生编号和学生姓名和平均成绩 --4.1、询在sc表存在成绩的学生信息的SQL语句。 --4.2、询在sc表中不存在成绩的学生信息的SQL语句。 --5、询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩 --5.1、询所有有成绩的SQL。 --5.2、询所有(包括有成绩和无成绩)的SQL。 --6、询"李"姓老师的数量 --7、询学过"张三"老师授课的同学的信息 --8、询没学过"张三"老师授课的同学的信息 --9、询学过编号为"01"并且也学过编号为"02"的课程的同学的信息 --10、询学过编号为"01"但是没有学过编号为"02"的课程的同学的信息 --11、询没有学全所有课程的同学的信息 --12、询至少有一门课与学号为"01"的同学所学相同的同学的信息 --13、询和"01"号的同学学习的课程完全相同的其他同学的信息 --14、询没学过"张三"老师讲授的任一门课程的学生姓名 --15、询两门及其以上不及格课程的同学的学号,姓名及其平均成绩 --16、检索"01"课程数小于60,按数降序排列的学生信息 --17、按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩 --18、询各科成绩最高最低平均: --19、按各科成绩进行排序,并显示排名 --20、询学生的总成绩并进行排名 --20.1 询学生的总成绩 --21、询不同老师所教不同课程平均从高到低显示 --22、询所有课程的成绩第2名到第3名的学生信息及该课程成绩 --26、询每门课程被选修的学生数 --27、询出只有两门课程的全部学生的学号和姓名 --28、询男生、女生人数 --29、询名字中含有"风"字的学生信息 --30、询同名同性学生名单,并统计同名人数 --31、询1990年出生的学生名单(注:Student表中Sage列的类型是datetime) --32、询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列 --33、平均成绩大于等于85的所有学生的学号、姓名和平均成绩 --34、询课程名称为"数学",且数低于60的学生姓名和数 --35、询所有学生的课程及数情况; --36、询任何一门课程成绩在70以上的姓名、课程名称和数; --37、询不及格的课程 --38、询课程编号为01且课程成绩在80以上的学生的学号和姓名; --39、求每门课程的学生人数 --40、询选修"张三"老师所授课程的学生中,成绩最高的学生信息及其成绩 --41、询不同课程成绩相同的学生的学生编号、课程编号、学生成绩 --42、询每门功成绩最好的前两名 --43、统计每门课程的学生选修人数(超过5人的课程才统计)。要求输出课程号和选修人数,询结果按人数降序排列,若人数相同,按课程号升序排列 --44、检索至少选修两门课程的学生学号 --45、询选修了全部课程的学生信息 --46、询各学生的年龄 --47、询本周过生日的学生 --48、询下周过生日的学生 --49、询本月过生日的学生 --50、询下月过生日的学生 --1、询"01"课程比"02"课程成绩高的学生的信息及课程数 --1.1、询同时存在"01"课程和"02"课程的情况 --1.2、询同时存在"01"课程和"02"课程的情况和存在"01"课程但可能不存在"02"课程的情况(不存在时显示为null)(以下存在相同内容时不再解释)
韩顺平oracle学习笔记 第0讲:如何学习oracle 一、如何学习oracle Oracle目前最流行的数据库之一,功能强大,性能卓越。学习oracle需要具备一定基础: 1.学习过一门编程语言(如:java ,c) 2.最好学习过一门别的数据库(sql server,mysql , access) 教程推荐:oracle使用教程, 深入浅出oracle 记住:欲速则不达,做任何事情要遵循他的规律,循序渐进,信心很重要 成为一个oracle高手过程:理解小知识点->做小练习->把小的只是点连成线->做oracle项目->形成只是面->深刻理解 Oracle基础部:oracle基础使用; oracle用户管理; oracle表管理 Oracle高级部:oracle表的询; oracle的函数; oracle数据库管理;oracle 的权角色; pl/sql 编程; 索引,约束和事物。 期望目标: 1 学会安装、启动、卸载oracle 2 使用sql *plus工具 3 掌握oracle用户管理 4 学会在oracle中编写简单的select语句 第1讲:基础语法 内容介绍: 1.为什么学习oracle 2.介绍oracle及其公司的背景 3.学会安装、启动、卸载oracle 4.oracle开发工具 5.Sql*plus的常用命令 6.oracle用户管理 一、主流数据库包括: ?微软:sql server 和 access ?瑞典:mysql AB公司 ?IBM公司:DB2 ?美国sybase公司:sybase ?IBM公司:infromix ?美国oracle公司:oracle(目前最流行的之一) 数据库类: 小型数据库 中型数据库 大型数据库 mysql Sybase access sql server Oracle informix DB2 负载量在100人内,比如比如在负载日访问量负载可以处理海量数据板,信息系信息留言统。 5000-15000 库 sybase服务和应用程序:服务->启动OracleServiceMYORA1(MYORA1 是安装oracle时起的名字各有不同)和OracleOracleHome90TNSLlistener 4.卸载oracle 1、先关掉oralce,net stop OracleServiceORCL(ORCL是我的实例名字,换成你的),或者去我的电脑服务中关闭 2、开始,,程序,,Oracle - oracle的版本号,我的是10ghome,,Oracle Installation Products,, Universal Installer 卸载oracle 3、进注册表,regedit,删除选择 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE下所有的key。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\App lication这个里面所有有oracle这个字眼的,删除 4、删除c盘\Program Files\Oracle目录的东西以及oracle安装目录下所有的文件以及文件夹 5、环境变量中删除有关oracle的classpath和path ,, 三、oracle开发工具, Sqlplus是Oracle自带的工具软件,主要用于执行sql语句,pl/sql块。,如何使用:,, 1)在开始,程序,oracle,orachome90,, ,,application,development,sql*plus(这个是在dos下操作), 2)在运行栏中输入:sqlplusw或者sqlplus即可, 3)在开始,程序,oracle,orahome90,, Application,development,sql*plus,worksheet,,4)pl/sql,developer,属于第三方软件,主要用于开发,测试,优化oracle,pl/sql,的 存储过程.如:触发器,此软件oracle不带,需要单独安装。,5)oracle的企业管理器(oem,oracle,enterprise,manager),位置在,,开始,程序,oracle,oracle,oraclehome90,enterprise,manager,console, ,,即可启动oracle的企业管理器,是一个图形界面环境, , , , 四、Sql*plus的常用命令, 3 1.连接命令 (1) conn[ect] 用法:conn 用户名/密码 @ 网络服务名[as sysdba/sysoper](角色登陆)当 用特权用户身份连接时,必须带上as sysdba 或是 as sysoper 例:conn scott/tiger; show user; 显示当前用户 2.断开连接命令 (2) disc[onnect] 说明:该命令用来断开与当前数据库的连接 (3)passw[ord] 说明:该命令用于修改用户名的密码。如果要想修改其他用户的密码,需要用sys/system登陆。 (4) show user 说明:显示当前用户名 (5) exit 说明:该命令会断开与数据库的连接,同时会退出sql*plus 3.文件操作命令 (1) start和@ 说明:运行sql脚本 案例:sql>@ d:\a.sql 或者 sql>start d:a.sql (2) edit 说明:该命令可以编辑指定的sql脚本。 案例:sql>edit d:\a.sql (3) spool 说明:该命令可以将sql*plus屏幕上的内容输出到指定文件中去。 案例:sql>spool d:\b.sql 并输入 sql>spool off 4(交互式命令 (1), 说明:可以替代变量,而该变量在执行时,需要用户输入。如:sql>select * from emp where job=‘&job;’ 输入job是注意大小写 (2) edit 说明:该命令可以编辑指定的sql脚本 案例: sql>edit d:\a.sql 5.显示和设置环境变量 概述:可以用来控制输出的各种格式,set show 如果希望永久的保存相关的设置,可以去修改 glogin.sql脚本 (1)linesize 说明:设置显示行的宽度,默认是80个字符 sql>show linesize sql>set linesize 90 (2)pagesize 说明:设置每页显示的行数目,默认是14,用法和linesize一样,至于其他环境参数的使用也是大同小异 sql>set pagesize 8 实际得到的不是14/8=2页 而是:14/(8-3)=5页 五Oracle用户的管理 4 1.创建用户 概述:在oracle中要创建一个新的用户使用create user语句,一般是具有dba(数据库管理员)的权限才能使用。 create user 用户名 identified by 密码; 2.给用户修改密码 概述:如果给自己修改密码可以直接使用 sql>password 用户名 如果给别人修改密码则需要具有dba的权限,或是拥有alter user的系统权限 sql>alter user 用户名 identified by 新密码 3.删除用户 概述:一般以dba的身份去删除某个用户,如果用其他用户去删除用户则需要具有 drop user的权限。 比如 drop user 用户名【cascade】 注意:在删除用户时,如果要删除的用户已经创建了表,就需要在删除的时候带一个参数cascade 4.用户管理的综合案例 概述:创建的新用户是没有任何权限的,甚至连登陆的数据库的权限都没有,需要为其指定相应的权限。给一个用户赋权限(connect登陆,dba管理员,resource建表)使用命令grant,回收权限使用命令revoke. 为了给讲清楚用户管理,给大家举一个案例。 案例: 新建一个用户lady 并给该用户赋可登陆可创建表 Sql>create user lady identified by lady123(密码) 受登陆权限:,grant connect to lady 受可创建表:grant resource to lady 可以多个同时授权:grant connect,resource to lady; 注意授权用户级别应该为(dba以上sys/system) 还可以使用PL/SQL工具创建:文件->新建->用户 现在我要把scott用户里面的emp表的权限赋给lady用户但lady只能有对emp询权限: grant select on emp to lady;(授权用户级别应该:授权本身,或者sys/system) lady 询emp的方式:select * from scott.emp; 案例:同上我想把update的权限也赋给leng , grant update on emp to leng; 2)我想把emp所有的(增,删,改,/insert,delete,update,select这四个一起可以用all代替) 操作权限赋给leng grant all on emp to leng;(此时登陆用户为scott) 案例2:这时我想把权限收回来怎么办呢, 这时用关键字revoke(撤回), revoke select on emp from lady; 收回lady的权限 案例: 5 现在scott希望吧询emp表权限通过lady用户继续给别的用户, Scott > grant select on emp to lady with grant option; Leng > grant select on scott.emp to 新建用户 案例: scott想把emp表的权限从leng用户赋权给新用户yoyo; Scott> grant select on emp to leng with grant option; Leng> grant select on scott.emp to yoyo; Yoyo> select * from scott.emp; 如果是对象权限,就加入with grant option 例:grant select on emp to xiaoming with grant option 如果是系统管理权限,system 给xiaoming权限时: 例:grant connect to xiaoming with admin option 如果scott把xiaoming 对emp表的询权限回收,那么xiaohong会怎么样 Scott->xiaoming->xiaohong ,结果就是xiaoming,xiaohong,都不能询emp表

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧