sql 查询最高分、最低分和平均分语句

sql 查询最高分、最低分和平均分语句
//我们要用就以学生成绩为实例吧
/*
结构

学生表
Student(S#,Sname,Sage,Ssex) --S# 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别
--2.课程表
Course(C#,Cname,T#) --C# --课程编号,Cname 课程名称,T# 教师编号

*/

查询各科成绩最高分、最低分和平均分:以如下形式显示:课程ID,课程name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率
--及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90
--方法1
select m.C# [课程编号], m.Cname [课程名称],
  max(n.score) [最高分],
  min(n.score) [最低分],
  cast(avg(n.score) as decimal(18,2)) [平均分],
  cast((select count(1) from SC where C# = m.C# and score >= 60)*100.0 / (select count(1) from SC where C# = m.C#) as decimal(18,2)) [及格率(%)],
  cast((select count(1) from SC where C# = m.C# and score >= 70 and score < 80 )*100.0 / (select count(1) from SC where C# = m.C#) as decimal(18,2)) [中等率(%)],
  cast((select count(1) from SC where C# = m.C# and score >= 80 and score < 90 )*100.0 / (select count(1) from SC where C# = m.C#) as decimal(18,2)) [优良率(%)],
  cast((select count(1) from SC where C# = m.C# and score >= 90)*100.0 / (select count(1) from SC where C# = m.C#) as decimal(18,2)) [优秀率(%)]
from Course m , SC n
where m.C# = n.C#
group by m.C# , m.Cname
order by m.C#
--方法2
select m.C# [课程编号], m.Cname [课程名称],
  (select max(score) from SC where C# = m.C#) [最高分],
  (select min(score) from SC where C# = m.C#) [最低分],
  (select cast(avg(score) as decimal(18,2)) from SC where C# = m.C#) [平均分],
  cast((select count(1) from SC where C# = m.C# and score >= 60)*100.0 / (select count(1) from SC where C# = m.C#) as decimal(18,2)) [及格率(%)],
  cast((select count(1) from SC where C# = m.C# and score >= 70 and score < 80 )*100.0 / (select count(1) from SC where C# = m.C#) as decimal(18,2)) [中等率(%)],
  cast((select count(1) from SC where C# = m.C# and score >= 80 and score < 90 )*100.0 / (select count(1) from SC where C# = m.C#) as decimal(18,2)) [优良率(%)],
  cast((select count(1) from SC where C# = m.C# and score >= 90)*100.0 / (select count(1) from SC where C# = m.C#) as decimal(18,2)) [优秀率(%)]
from Course m
order by m.C#

时间: 2024-10-13 23:02:58

sql 查询最高分、最低分和平均分语句的相关文章

Excel里去掉最高分最低分再求平均分

求平均分是Excel里再平常不过的操作了.使用EXCEL,不仅可以求简单的平均分,即使要去掉几个最高分.最低分再求平均分,那也是很容易的事情. 一.直接求平均分 如果要对指定的数据直接求平均分,那显然是最简单的.如图1所示,假定要求平均分的数据在B2:B20单元格,那么我们只要在B21单元格输入公式:=AVERAGE(B2:B20),回车后平均分就有了. 图1 平均分的数据 二.去掉指定分数再求平均分 有两种方法可以实现这个要求. 以去掉一个最高分和一个最低分之后再求平均分为例. 我们可以在B2

软件开发-我这代码的computer的最高分和最低分老不对,怎么办?

问题描述 我这代码的computer的最高分和最低分老不对,怎么办? #include<stdio.h> #include<stdlib.h> #include<string.h> #define maxsize 5 struct student { int num; char name[30]; int english,computer,math,chinese; int rank; }; double aen,aco,ama,ach;int maxch,maxma,

这个sql语句怎么写啊?找出每个同学最高分,最低分及对应的科目

问题描述 这个sql语句怎么写啊?找出每个同学最高分,最低分及对应的科目 select name,course as mincourse,score as minscore from userscore ore in(select min(score) from userscore group by name) group by name; select name,course as mincourse,score as minscore from userscore ore in(select

sql语句问题,输出每个人最高分、最低分以及对应的科目,还有每个人的平均分

问题描述 sql语句问题,输出每个人最高分.最低分以及对应的科目,还有每个人的平均分 这样写只能输出每个人的最高分.最低分以及对应的科目 请问我怎么将每个人的平均分也输出来呢? 解决方案 像下面这样,出来的结果应该是 张三 60 90 80 最低分科目 最高分科目 李四 50 100 80 最低分科目 最高分科目 select name,max(最低分) 最低分,max(最高分) 最高分,max(平均分) 平均分 ,max(最低分科目) 最低分科目,max(最高分科目) 最高分科目 from(

oracl数据库sql语句怎么查询工资最低的两名员工编号,姓名,工资等信息。

问题描述 oracl数据库sql语句怎么查询工资最低的两名员工编号,姓名,工资等信息. 查询每个部门工资最低的两个员工编号,姓名,工资,等信息.关键是工资最低的两名员工 解决方案 SELECT * FROM ( SELECT bumen, price, ROW_NUMBER () OVER ( PARTITION BY bumen ORDER BY bumen, price DESC ) rn FROM table1 WHERE bumen IN ( SELECT bumen FROM tabl

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

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()分析函数(

如何用ASp实现去掉三个最高分和三个最低分

今天又帮助了一个网友,我的口号是"以帮助别人为快乐!" 问题:用asp如何实现去掉三个最高分和三个最低分?解决思路:1.将整个数组排序,删除两端的三个最大值和三个最小值(另一网友提出的!)2.挑选出其中三个最大的数和三个最小的数,将其删除!(我的思路!) 我觉得我的方法应该可行一些,因为要删除的数只有三个最大,三个最小,没有必要把所有的数都进行排序,特别是当数据很多时,将会浪费很多的资源!我写的序如下:<%@LANGUAGE="VBSCRIPT" CODEPA

c语言编程,输出最高分和最低分,为什么出错了···

问题描述 c语言编程,输出最高分和最低分,为什么出错了··· #include void main() { float maxscore,minscore,minnum,maxnum; int i,n; printf("请输入8位同学的学号num:n"); scanf("%d",&n); printf("输入8名同学的英语成绩score:n"); for(i=0;i scanf("%d",&num[i],&am

[数据库] SQL查询语句表行列转换及一行数据转换成两列

本文主要讲述了SQL查询语句表之间的行列转换,同时也包括如何将一行数据转换成两列数据的方法.子查询的应用.decode函数的用法.希望文章对你有所帮助~ 1.创建数据库表及插入数据 2.子查询统计不同性质的学生总数 3.一行数据转换成两列数据 union all 4.表行列数据转换(表转置) 1.创建数据库表及插入数据 创建数据库.创建学生表并设置主键.插入数据代码如下: --创建数据库 create database StudentMS --使用数据库 use StudentMS --创建学生