SQL 找出平均成绩大于80的学生总人数?找出平均成绩最高的学生的所有信息?

表:STUDENT(学号,姓名,年号)8101,张三,18,101;8102,钱四,16,121;8103,王玲,17,131;8105,李飞,19,102;8109,赵... 表:STUDENT(学号,姓名,年号)
8101 ,张三, 18 , 101 ;
8102 ,钱四, 16 , 121 ;
8103 ,王玲, 17 , 131 ;
8105 ,李飞, 19 , 102 ;
8109 ,赵四, 18 , 141 ;
8110 ,李可, 20 , 142 ;
8201 ,张飞, 18 , 111 ;
8302 ,周瑜, 16 , 112 ;
8203 ,王亮, 17 , 111 ;
8305 ,董庆, 19 , 102 ;
8409 ,赵龙, 18 , 101 ;
8510 ,李丽, 20 , 142 ;
表:GRADE(学号,姓名,课程号,成绩)
8101 ,张三, 001 , 80 ;
8101 ,张三, 002 , 88 ;
8102 ,钱四, 001 , 85 ;
8102 ,钱四, 002 , 80 ;
8103 ,王玲, 001 , 89 ;
8103 ,王玲, 003 , 90 ;
8105 ,李飞, 001 , 85 ;
8105 ,李飞, 003 , 70 ;
8109 ,赵四, 002 , 85 ;
8109 ,赵四, 003 , 70 ;
8110 ,李可, 001 , 80 ;
8201 ,张飞, 002 , 90 ;
8302 ,周瑜, 001 , 92 ;
8302 ,周瑜, 003 , 90 ;
8203 ,王亮, 003 , 80 ;
8305 ,董庆, 001 , 70 ;
8305 ,董庆, 002 , 85 ;
8409 ,赵龙, 001 , 80 ;
8409 ,赵龙, 002 , 70 ;
8510 ,李丽, 001 , 80 ;

我只能找出平均成绩大于80的学生的姓名和平均成绩,不知道这总人数该怎么求,查资料觉得应该要用嵌套语句,可还没学过,以下是我编的第一个题目的程序,但出来答案不对,哪位高手帮忙解决下?
SELECT count(number)
FROM dbo.[GRADE]
WHERE EXISTS
(SELECT number, avg(grade)
FROM dbo.[grade]
group by number
having avg(grade)>80
)
第一张表打错了,年号改为班号
学号:number 名字:name 班号:clnumber 课程号:conumber 成绩:grade

前面两楼的我试了,不行哦~
第一题三楼的我试过行,但第二题好像都不行哦,是最高平均值,gav()上再加max(),不知道该怎么编
展开
 我来答
暴雁菱0e1
2010-04-23 · TA获得超过2003个赞
知道小有建树答主
回答量:1192
采纳率:0%
帮助的人:0
展开全部
1.select count(*) from (select 学号,avg(成绩) score from grade group by 学号) a where a.score>80
2.select * from student where 学号 in(select top 1 学号 from (select 学号,avg(成绩) score from grade group by 学号)a order by score desc)

哦,第二个没注意,已修改
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
leeilu
2010-04-23 · 超过16用户采纳过TA的回答
知道答主
回答量:56
采纳率:0%
帮助的人:0
展开全部
第一题:
SELECT count(number)
FROM dbo.[GRADE]
WHERE number in
(SELECT number, avg(grade)
FROM dbo.[grade]
group by number
having avg(grade)>80
)
group by number

第二题:

SELECT 学号,姓名,班号,课程号,成绩
FROM dbo.[GRADE],dbo.[STUDENT]
WHERE GRADE.number=STUDENT.number and
number in
(SELECT number, max(grade)
FROM dbo.[grade]
group by number
)

楼主试试吧~呵呵,好久没写过数据库了,也不知道行不行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
skyfukk
2010-04-27 · TA获得超过1187个赞
知道小有建树答主
回答量:966
采纳率:100%
帮助的人:631万
展开全部
SELECT count(number)
FROM dbo.[GRADE]
WHERE number in
(SELECT number, avg(grade)
FROM dbo.[grade]
group by number
having avg(grade)>80
) group by number

第二个问题:
select p1.number,p1.name,p2.clnumber,p1.conumber,grade from (selct number,name,conumber,grade from grade) p1 left join (select number,clnumber from STUDENT) p2 on p1.number=p2.number where number= (SELECT number,max(grade) FROM GRADE WHERE number in (SELECT number, avg(grade) FROM grade group by number having avg(grade)>80))

新修改的语句,经过测试.....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yjx_xiaoxin
2010-04-23 · TA获得超过6702个赞
知道大有可为答主
回答量:4618
采纳率:50%
帮助的人:2499万
展开全部
SELECT count(*)
FROM
(SELECT avg(grade) as column1
FROM dbo.[grade]
group by number
having avg(grade)>80
) as t
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式