查询成绩最好的前两名

您所在的位置:网站首页 sql各科成绩最好的前十名 查询成绩最好的前两名

查询成绩最好的前两名

2024-07-12 18:53:38| 来源: 网络整理| 查看: 265

e86d2e33660b6296808608b6dc9fb1fa.png 一、简单查询

e9dbc37d4e2adc1d56d34f31c424d004.png

549b8a5c25939b8a8ae16ad77ca69050.png

d05b02c24a8e4daaece279bb45be48ef.png 二、汇总分析 -- 课程编号0002总成绩 SELECT SUM(`成绩`) FROM score WHERE `课程号` = '0002'; -- 选课人数 SELECT count(DISTINCT 学号) AS 选课人数 FROM score; -- 各科成绩最高分与最低分 SELECT `课程号`,MAX(`成绩`) AS 最高分,MIN(`成绩`) AS 最低分 FROM score GROUP BY `课程号`; -- 每门课程选修人数 SELECT `课程号`,COUNT(*) as 选修人数 FROM score GROUP BY `课程号`; -- 查询男女人数 SELECT `性别`,COUNT(*) AS `人数` FROM student GROUP BY `性别`; -- 查询平均成绩大于60分学生的学号和平均成绩 SELECT `学号`, AVG(`成绩`) FROM score GROUP BY `学号` HAVING AVG(成绩) > 60; -- 查询至少选修两门课程的学生学号 SELECT `学号`,COUNT(`课程号`) AS 选修课程数 FROM score GROUP BY `学号` HAVING COUNT(`课程号`) >= 2; -- 查询同名同姓名单并统计人数 SELECT `姓名`, COUNT(*) AS 同名人数 FROM student GROUP BY `姓名` HAVING COUNT(*) > 1; -- 查询及格的课程并按课程号从小到大排列 SELECT 课程号, `成绩` FROM score HAVING `成绩` >=60 ORDER BY `课程号` ASC; -- 查询每门课程平均成绩,结果按平均成绩升序排序,平均成绩相同,按课程号降序 SELECT `课程号`, AVG(`成绩`) AS 平均成绩 FROM score GROUP BY `课程号` ORDER BY AVG(`成绩`) ASC , 课程号 DESC; -- 检索课程编号‘0003’且分数大于60的学生学号,结果按分数降序排列 SELECT `学号`, `成绩` FROM score WHERE `课程号` = '0003' AND `成绩` > 60 ORDER BY `成绩` DESC; -- 统计每门课程选修人数(超过两人才统计),输出课程号与选修人数,按人数降序,人数相同按课程号升序 SELECT `课程号`,COUNT(*) FROM score GROUP BY `课程号` HAVING COUNT(*) > 2 ORDER BY COUNT(*) DESC ,`课程号` ASC; -- 查询两门以上不及格课程的同学学号,以及不及格课程及平均成绩 SELECT `学号`,AVG(`成绩`) AS 平均成绩 FROM score WHERE `成绩` < 60 GROUP BY `学号` HAVING COUNT(`课程号`) > 1; 三、复杂查询 -- 1查询所有课程成绩小于60分的学生的学号、姓名 SELECT `学号`,`姓名` FROM student WHERE `学号` IN ( SELECT `学号` FROM score GROUP BY `学号` HAVING MAX(`成绩`) < 60 ); -- 2查询没有学全所有课的学生学号和姓名 SELECT `学号`,`姓名` FROM student WHERE `学号` IN ( SELECT `学号` FROM score GROUP BY `学号` HAVING COUNT(`课程号`) < (SELECT COUNT(`课程号`) FROM course) ); -- 3、4查询只选了两门课程的学生学号和姓名 SELECT `学号`,`姓名` FROM student WHERE `学号` IN ( SELECT `学号` FROM score GROUP BY `学号` HAVING COUNT(`课程号`) =2 ); SELECT stu.`学号`,stu.`姓名` FROM student stu INNER JOIN score sco ON stu.`学号` = sco.`学号` GROUP BY stu.`学号` HAVING COUNT(sco.`课程号`) =2; -- 5查找1990年出生的学生名单 SELECT `学号`, `姓名` FROM student WHERE YEAR(`出生日期`) = 1990; -- 6按课程号分组取成绩最大值所在行数据 SELECT * FROM score a WHERE `成绩` = ( SELECT MAX(成绩) FROM score b WHERE a.`课程号` = b.`课程号` GROUP BY `课程号` ); -- 7按课程号分组取成绩最小值所在行数据 SELECT * FROM score a WHERE `成绩` = ( SELECT MIN(成绩) FROM score b WHERE a.`课程号` = b.`课程号` GROUP BY `课程号` ); -- 8查询各科成绩前两名信息 (SELECT * FROM score WHERE `课程号`= '0001' ORDER BY 成绩 DESC LIMIT 2) UNION all (SELECT * FROM score WHERE `课程号`= '0002' ORDER BY 成绩 DESC LIMIT 2) UNION all (SELECT * FROM score WHERE `课程号`= '0003' ORDER BY 成绩 DESC LIMIT 2); 四、多表查询

1.常规

-- 1查询所有学生的学号、姓名、选课数、总成绩 SELECT stu.`学号`,`姓名`,COUNT(`课程号`) AS 选课数,SUM(`成绩`) AS 总成绩 FROM student stu INNER JOIN score sco ON stu.`学号` = sco.`学号` GROUP BY stu.`学号`; -- 2查询平均成绩大于85的所有学生学号姓名平均成绩 SELECT stu.`学号`,stu.`姓名`,AVG(sco.`成绩`) AS 平均成绩 FROM student stu INNER JOIN score sco ON stu.`学号`= sco.`学号` GROUP BY stu.`学号` HAVING 平均成绩>85; -- 3查询所有学生学号、姓名、课程号、课程名称 SELECT stu.`学号`,stu.`姓名`,cou.`课程号`,cou.`课程名称` FROM student stu INNER JOIN score sco ON stu.`学号`= sco.`学号` INNER JOIN course cou ON sco.`课程号` = cou.`课程号`; -- 4查询出每门课程的及格与不及格人数 SELECT `课程号`, SUM(CASE WHEN `成绩`>= 60 THEN 1 ELSE 0 END) AS 及格人数, SUM(CASE WHEN `成绩`< 60 THEN 1 ELSE 0 END) AS 不及格人数 FROM score GROUP BY `课程号`; -- 5分段统计各科成绩[85-100][70-85][60-70][ 80;

2.行列转换

a2acb67133d6ef1a413bf4d35b0f638c.png

512c6cef519f9abdbf04f3ee487ee4ca.png

1.使用常量列表输出目标表结构

76863717d5ee7f0ab13b5171a92166cf.png

2.使用case表达式,替换常量对应列成绩

2c1b590fb9a4416d2c44f1824368996c.png

3.分组使用max函数取每个方块的最大值

f082aaca08eec20d77021de8ab9d2e07.png 五、注意事项

1.SELECT语句尽量避免使用*

2.WHERE 子句比较符号左侧避免使用函数尽量避免在where条件子句中,比较符号的左侧出现表达式、函数等操作。因为这会导致数据库引擎进行全表扫描,从而增加运行时间。eg: where 成绩+5 > 90 --> where 成绩 > 90-5

3.尽量避免使用in和not in in和not in也会导致数据库进行全表搜索,增加运行时间。eg where 学号 in (8,9) --> where 学号 between 8 and 9

4.尽量避免使用oror同样会导致数据库进项全表搜索。在工作中,如果你只想用or从几十万语句中取几条出来,是非常划不来的,怎么办呢?下面的方法可替代or。eg.select 学号 from 成绩表 where 成绩 = 88 or 成绩 = 89 -->select 学号 from 成绩表 where 成绩 = 88 union select 学号 from 成绩表 where 成绩 = 89语句虽然变长了一点,但处理大量数据时,可以省下很多时间,是非常值得的。

5.使用limit子句限制返回的数据行数如果前台只需要显示15行数据,而你的查询结果集返回了1万行,那么这适合最好使用limt子句来限制查询返回的数据行数。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭