sql查询语句之平均分、最高最低分及排序语句

目录
  • 前言
  • 数据表数据
  • 查询各课程的考试学生人数
  • 查询各科成绩最高分和最低分
  • 查询男生、女生人数
  • 查询平均成绩
  • 查询平均成绩大于70分学生的学号和平均成绩
  • 查询学生考试参与考试课程数量
  • 查询考试两门以上课程的学生学号
  • 查询同名学生名单并统计同名人数
  • 计算每门课程的平均成绩
  • 计算每门课程的平均成绩并且平均成绩大于等于70分
  • 查询不及格的课程并按课程号从大到小排列
  • 查询每门课程的平均成绩,结果按平均成绩降序排列,如果平均成绩相同时,按课程号升序排列
  • 总结

前言

以mysql为例,汇总sql查询最高分、最低分、平均分等sql语句,oracle语法类似,可自行修改以下sql语句

创建两个数据库表,一个学生表、一个考试成绩表

DROP TABLE IF EXISTS `score`;
CREATE TABLE `score`  (
  `u_id` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '编号',
  `object_no` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '课程编号',
  `students_no` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学号',
  `score` int(11) NULL DEFAULT NULL COMMENT '分数'
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

INSERT INTO `score` VALUES ('1', '100', 's100', 80);
INSERT INTO `score` VALUES ('2', '100', 's200', 59);
INSERT INTO `score` VALUES ('3', '100', 's300', 79);
INSERT INTO `score` VALUES ('4', '200', 's100', 54);
INSERT INTO `score` VALUES ('5', '200', 's200', 96);
INSERT INTO `score` VALUES ('6', '200', 's300', 74);
INSERT INTO `score` VALUES ('7', '300', 's100', 65);
INSERT INTO `score` VALUES ('8', '300', 's200', 80);
INSERT INTO `score` VALUES ('9', '200', 's400', 62);
INSERT INTO `score` VALUES ('10', '300', 's400', 56);
INSERT INTO `score` VALUES ('11', '100', 's400', 70);
SET FOREIGN_KEY_CHECKS = 1;

DROP TABLE IF EXISTS `students`;
CREATE TABLE `students`  (
  `students_no` varchar(12) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '编号',
  `students_name` varchar(12) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `sex` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别',
  PRIMARY KEY (`students_no`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

INSERT INTO `students` VALUES ('s100', '张三', '1');
INSERT INTO `students` VALUES ('s200', '李四', '2');
INSERT INTO `students` VALUES ('s300', '张三', '1');
INSERT INTO `students` VALUES ('s400', '王五', '1');
SET FOREIGN_KEY_CHECKS = 1;

数据表数据

查询各课程的考试学生人数

select object_no as '课程编号', count(DISTINCT students_no) '考试人数' from score group by object_no

查询各科成绩最高分和最低分

select object_no as '课程编号',max(score) as '最高分',min(score) as '最低分' from score group by object_no

查询每门课程被选修的学生数

select object_no as '课程编号', count(DISTINCT students_no) as '学生编号' from score group by object_no

查询男生、女生人数

select sex '性别',count(DISTINCT students_no) '数量' from students group by sex

查询平均成绩

select students_no as '学生编号',avg(score) as '平均成绩' from score group by students_no

查询平均成绩大于70分学生的学号和平均成绩

select students_no as '学生编号',avg(score) as '平均成绩' from score group by students_no HAVING avg(score)>70

查询学生考试参与考试课程数量

select students_no as '学生编号',count(object_no) as '课程编号'  from score   group by students_no

查询考试两门以上课程的学生学号

select students_no as '学生编号',count(object_no) as '课程编号'  from score   group by students_no HAVING count( object_no)>2

查询同名学生名单并统计同名人数

select students_name as '学生名称',count(students_name) as '同名数量'  from students group by students_name HAVING count(students_name)>1

计算每门课程的平均成绩

select object_no as '课程编号',avg(score) as '平均成绩' from score group by object_no

计算每门课程的平均成绩并且平均成绩大于等于70分

select object_no as '课程编号',avg(score) as '平均成绩' from score group by object_no HAVING avg(score)>70

查询不及格的课程并按课程号从大到小排列

select object_no as '课程编号',students_no '学生编号',score '分数' from score where score<60 order by object_no desc

查询每门课程的平均成绩,结果按平均成绩降序排列,如果平均成绩相同时,按课程号升序排列

select object_no as '课程编号',avg(score) as '平均成绩' from score group by object_no order by avg(score) desc,object_no asc

总结

到此这篇关于sql查询语句之平均分、最高最低分及排序语句的文章就介绍到这了,更多相关mysql平均分查询语句内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MySQL查询排序与查询聚合函数用法分析

    本文实例讲述了MySQL查询排序与查询聚合函数用法.分享给大家供大家参考,具体如下: 排序 为了方便查看数据,可以对数据进行排序 语法: select * from 表名 order by 列1 asc|desc [,列2 asc|desc,...] 说明 将行数据按照列1进行排序,如果某些行列1的值相同时,则按照列2排序,以此类推 默认按照列值从小到大排列(asc) asc从小到大排列,即升序 desc从大到小排序,即降序 例1:查询未删除男生信息,按学号降序 select * from st

  • mysql 查询表中平均分最低的班级

    复制代码 代码如下: drop table if exists dd; create table dd ( user_id int , class_no int , score int ); insert into dd values (1,1,1), (2,1,1), (3,1,2), (4,2,2); select class_no ,avg(score)from dd group by class_no order by avg(score); 在MySQL下面测试通过.

  • SQL行号排序和分页(SQL查询中插入行号 自定义分页的另类实现)

    (一)行号显示和排序 1.SQL Server的行号 A.SQL 2000使用identity(int,1,1)和临时表,可以显示行号 SELECT identity(int,1,1) AS ROWNUM, [DataID] INTO #1 FROM DATAS order by DataID; SELECT * FROM #1 B.SQL 2005提供一个很好用的函数row_number(), 可以直接用来显示行号,当然也可以使用SQL 2000的identity SELECT row_num

  • sql查询表中根据某列排序的任意行语句

    复制代码 代码如下: select * from (select t.*, row_number() over(order by 列 desc) r from 表 t) where r <= 某行 and r>=某行

  • MySQL查询优化:连接查询排序浅谈

    情况是这么一个情况:现在有两张表,team表和people表,每个people属于一个team,people中有个字段team_id. 下面给出建表语句: 复制代码 代码如下: create table t_team(id int primary key,tname varchar(100)); create table t_people(id int primary key,pname varchar(100),team_id int,foreign key (team_id) referen

  • 浅谈Mysql指定顺序排序查询

    最近做一个大屏展示项目,类似于机场,火车站那种展示班次信息的那种,不过展示的内容要复杂的多,其中部分数据如下: 前端主要用Vue框架,要求后端数据在前端展示, 第一:进厂,出厂指标不固定(可能6,也可能以后7,8个): 第二:无"数值"值的用斜杠代替: 第三:进出厂指标名字一定要符合如上图指定的名字(后端数据库查询出来的名字和前端指定的名字不一样,以及单位中带有 ">1",">0.3"之类的,所以不能直接从后端查询 ,名字+单位 放在

  • MySQL 查询的排序、分页相关

    概述 数据库中的数据直接呈现出来一般不是我们想要的,所以我们上两节演示了如何对数据进行过滤的方法.除了对数据进行过滤, 我们可能还需要对数据进行排序,比如想从列表中了解消费最高的项,就可能需要对金额字段做降序排序,想看年龄从小到大的分布情况,就可能需要对user表的age字段进行升序排序. 也可能需要对数据进行限制,比如我们需要对付款的1~10,11~20,21~30 名的用户分别赠予不同的礼品,这时候对数据的限制就很有用了. 备注:下面脚本中[]包含的表示可选,| 分隔符表示可选其一. 数据排

  • sql查询语句之平均分、最高最低分及排序语句

    目录 前言 数据表数据 查询各课程的考试学生人数 查询各科成绩最高分和最低分 查询男生.女生人数 查询平均成绩 查询平均成绩大于70分学生的学号和平均成绩 查询学生考试参与考试课程数量 查询考试两门以上课程的学生学号 查询同名学生名单并统计同名人数 计算每门课程的平均成绩 计算每门课程的平均成绩并且平均成绩大于等于70分 查询不及格的课程并按课程号从大到小排列 查询每门课程的平均成绩,结果按平均成绩降序排列,如果平均成绩相同时,按课程号升序排列 总结 前言 以mysql为例,汇总sql查询最高分

  • sql 查询本年、本月、本日记录的语句,附SQL日期函数

    查询本日记录 SELECT * FROM messages WHERE CONVERT(Nvarchar, CreateDate, 111) = CONVERT(Nvarchar, GETDATE(), 111)   ORDER BY CreateDate DESC SELECT * FROM 表 WHERE datediff(day,列名,getdate())=0 查询本年 SELECT count(*) FROM messages WHERE datediff(year,CreateDate

  • MySQL常用SQL语句总结包含复杂SQL查询

    1.复杂SQL查询 1.1.单表查询 (1)选择指定的列 [例]查询全体学生的学号和姓名 select Sno as 学号,Sname as 姓名 from student; select Sno,Sname from student; (2)查询全部列 [例]查询全体学生的详细信息 select * from student; (3)对查询后的指定列进行命名 [例]查询全部学生的"姓名"及其"出生年"两列 select Sname as 姓名,(2014-Sage

  • oracle常用sql查询语句部分集合(图文)

    Oracle查询语句 select * from scott.emp ; 1.--dense_rank()分析函数(查找每个部门工资最高前三名员工信息) select * from (select deptno,ename,sal,dense_rank() over(partition by deptno order by sal desc) a from scott.emp) where a<=3 order by deptno asc,sal desc ; 结果: --rank()分析函数(

  • 50条SQL查询技巧、查询语句示例

    Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表   问题: 1.查询"001"课程比"002"课程成绩高的所有学生的学号: 复制代码 代码如下: select a.S# from (select s#,score from SC where C#='001') a,(select s#,score from SC whe

  • SQL查询语句行转列横向显示实例解析

    本文分享了两个有关SQL查询语句行转列横向显示的示例,供大家参考,具体内容如下 示例1: 在SQL查询语句行转列横向显示中access中没有CASE,要用IIF代替 select  iif(sex= '1 ', '男 ', '女 ')  from  tablename select country, sum(case when type='A' then money end) as A, sum(case when type='B' then money end) as B, sum(case

  • MySQL中一条SQL查询语句是如何执行的

    目录 前言 1. 处理连接 1.1 客户端和服务端的通信方式 1.1.1 TCP/IP协议 1.1.2 UNIX域套接字 1.1.3 命名管道和共享内存 1.2 权限验证 1.3 查看MySQL连接 2. 解析与优化 2.1 查询缓存 2.2 解析器 & 预处理器(Parser & Preprocessor) 2.2.1 词法解析 2.2.2 语法分析 2.2.3 预处理器 2.3 查询优化器(Optimizer)与查询执行计划 2.3.1 什么是查询优化器? 2.3.2 优化器究竟做了什

  • SQL查询语句执行的过程

    目录 MySQL基本架构 Server 层 1.连接器 2.查询缓存 3.分析器 4.优化器 5.执行器 SQL语句举例: SELECT * FROM `test` WHERE `id`=1; 当我们输入一条SQL语句,返回一个结果时,那这条语句在 MySQL 内部的执行过程是怎么的呢? MySQL基本架构 下面给出的是 MySQL 的基本架构示意图(图片来自网络),从下图中我们可以比较清楚地看到 SQL 语句在 MySQL 的各个功能模块中的执行过程. 从上图直观的来看,MySQL 可分为 S

  • SQL查询语句通配符与ACCESS模糊查询like的解决方法

    ACCESS的通配符和SQL SERVER的通配符比较===================================================ACCESS库的通配符为:*   与任何个数的字符匹配?   与任何单个字母的字符匹配 SQL Server中的通配符为:% 与任何个数的字符匹配_ 与单个字符匹配正文我今天在写个页面的时候,也很郁闷,表中明明有记录,但在ASP里就是搜索不到,理论的sql语句如下:Select * FROM t_food Where t_food.name

  • 15个初学者必看的基础SQL查询语句

    本文将分享15个初学者必看的基础SQL查询语句,都很基础,但是你不一定都会,所以好好看看吧. 1.创建表和数据插入SQL 我们在开始创建数据表和向表中插入演示数据之前,我想给大家解释一下实时数据表的设计理念,这样也许能帮助大家能更好的理解SQL查询. 在数据库设计中,有一条非常重要的规则就是要正确建立主键和外键的关系. 现在我们来创建几个餐厅订单管理的数据表,一共用到3张数据表,Item Master表.Order Master表和Order Detail表. 创建表: 创建Item Maste

随机推荐