永发信息网

sql求各门课程去掉一个最高分和最低分后的平均分

答案:3  悬赏:50  手机版
解决时间 2021-11-30 16:48
sql求各门课程去掉一个最高分和最低分后的平均分
最佳答案
--学生表
create table s
(
sno int ,
sname nvarchar(16),
age int,
sex varchar(2)
)

--成绩表
create table sc
(
sno int,
cno int,
grade int
)

--课程表
create table c
(
cno int,
cname nvarchar(25),
teacher nvarchar(25)
)
--插入学生
insert into s values(6,'宋八',18,'男')
insert into s values(5,'王七',18,'男')
insert into s values(4,'赵六',18,'女')

--插入 课程
insert into c values(1,'语文','张老师')
insert into c values(2,'数学','王老师')
insert into c values(3,'外语','李老师')

select * from s

--插入成绩
insert into sc values(1,1,20)
insert into sc values(1,2,30)
insert into sc values(1,3,40)

insert into sc values(2,1,70)
insert into sc values(2,2,60)
insert into sc values(2,3,50)

insert into sc values(3,1,50)
insert into sc values(3,2,25)
insert into sc values(3,3,30)

insert into sc values(4,1,20)
insert into sc values(4,2,30)
insert into sc values(4,3,40)

insert into sc values(5,1,28)
insert into sc values(5,2,30)
insert into sc values(5,3,48)

insert into sc values(6,1,20)
insert into sc values(6,2,30)
insert into sc values(6,3,40)

--该函数获得每门课程除去最低分和最高分后的平均成绩
--传入参数为 课程编号
create function cg(@cid int) returns table
as
return (select cs.cname 课程名称,avg(newsc.grade) as 平均分 from sc as newsc,c as cs where grade not in ((select max(grade) from sc where cno = @cid), (select min(grade) from sc where cno = @cid))
and newsc.cno = @cid and cs.cno = newsc.cno group by cs.cname)

--查询结果
select * from dbo.cg(1) union select * from dbo.cg(2) union select * from dbo.cg(3)
全部回答
平均分用 avg()
学生表:S SNO(学生编号) SNAME(姓名) AGE(年龄) SEX(性别)
关系表:SC SNO CNO GRADE(评分)
课程表:C CNO(课程编号) CNAME(课程名称) TEACHER(任课教师)

求各门课程去掉一个最高分和最低分后的平均分,

我建表测试过了,没有问题:

SELECt tt1.cno AS 课程编号,AVG(grade) AS 平均分
FROM
(
SELECt C.cno,grade
FROM S
INNER JOIN SC
ON S.sno = SC.sno
INNER JOIN C
ON SC.cno = C.cno
) tt1
INNER JOIN
(
SELECt cno,max_g,min_g
FROM
(
SELECt C.cno,MAX(grade) AS max_g
FROM S
INNER JOIN SC
ON S.sno = SC.sno
INNER JOIN C
ON SC.cno = C.cno
GROUP BY C.cno
) t1
INNER JOIN
(
SELECt C.cno,MIN(grade) AS min_g
FROM S
INNER JOIN SC
ON S.sno = SC.sno
INNER JOIN C
ON SC.cno = C.cno
GROUP BY C.cno
) t2
USING (cno)
) tt2
ON tt1.cno = tt2.cno
AND
tt1.grade NOT IN (tt2.max_g,tt2.min_g)
GROUP BY tt1.cno;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
现在的香椿怎样储存到冬天吃
房号302吉凶
狗狗震高清完整版下载
港澳身份证能在中国当警察吗
香港的黄道益和安美露大概多少钱是正常价位啊
it tasted great感叹句
TPM基础书籍
旅游返回祝福语
有电脑怎么赚钱? 我自己有2台电脑,我看店的
男士落晒胡用什么类型的剃须刀好呀?
OCA光学胶带和LOCA胶水有什么区别?
单选题It’stoodarkhere.Please________thel
北京现代索纳塔2006款这车怎么样
上原れな closing 的罗马音歌词,最好附上日文
我买了一顶假发颜色太深了,想把颜色变淡,有
推荐资讯
有没有男主家里不富裕,但女主家很有钱的的现
最大的嘴巴四字词语
4S店展车卫生标准是什么
F盘里ghos是什么文件夹
这种糯米糍粑成分经常吃会不会上火?会热气吗
结婚请帖请老板恭请怎么写好看
我欠提钱乐 两千多块钱 现在没钱还 不还以后
请问一般你们都是买什么品牌的棕刚玉喷砂磨料
你能接受我不
将直角三角形的三条边的长度都扩大同样的倍数
7.02-4.5+10.98-5.5用简便
有没有大神知道这个放大电路的原理?VT1和VT2
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?