注册 登录
编程论坛 SQL Server论坛

把平均成绩大于80分的男同学的学号和平均成绩存入另一个表S 大家看下错在哪了

jiushiwo 发布于 2007-04-16 09:44, 4761 次点击

--11. 把平均成绩大于80分的男同学的学号和平均成绩存入另一个表S——GRADE(SNO,AVG_GRADE);
//*create view sss_grade(sno,gavg)
as
select sno,avg(grade)
from SC,S
where SC.sno=S.sno and S.ssex='男'
group by sno
having avg(grade)>80;
select *
from sss_grade*/

[此贴子已经被作者于2007-4-16 9:54:54编辑过]

10 回复
#2
jiushiwo2007-04-16 10:00
create table ss1_grade
( sno char(9),
avg_grade smallint);
insert
into ss1_grade(SC.sno,avg_grade)
select SC.sno,avg(grade)
from SC,S
where SC.sno=S.sno and S.ssex='男'
group by SC.sno
having avg(grade)>80;*/用这能成功但是我想用视图做做,大家帮帮忙
#3
棉花糖ONE2007-04-16 10:25
create view sss_grade(sno,gavg)
as
select sno,avg(grade)
from SC,S
where SC.sno=S.sno and S.ssex='男'
group by sno
having avg(grade)>80;

avg(grade)改成avg(grade) as gavg试试
#4
jiushiwo2007-04-16 12:46
不行啊
还是谢谢棉花糖了
#5
Kendy1234562007-04-16 16:50

create view sss_grade

as

select SC.sno,avg = avg(grade)
from SC,S
where SC.sno=S.sno and S.ssex='男'
group by SC.sno
having avg(grade)>80

不要去命名列名

只有在下列情况下,才必须命名 CREATE VIEW 中的列:当列是从算术表达式、函数或常量派生的,两个或更多的列可能会具有相同的名称(通常是因为联接),视图中的某列被赋予了不同于派生来源列的名称。还可以在 SELECT 语句中指派列名。

如果未指定 column,则视图列将获得与 SELECT 语句中的列相同的名称。

#6
xiyou4192007-04-16 21:52
你的问题很明显,你看看你自己发的帖子,你在2楼发的那段程序中要查询的列是确定的,
而你在楼上发的那个你说有错误的程序中查询的列是不确定的,应该是select SC.sno,avg(grade)

[此贴子已经被作者于2007-4-16 22:39:23编辑过]

#7
xiyou4192007-04-16 22:41
以下是引用Kendy123456在2007-4-16 16:50:39的发言:

create view sss_grade

as

select SC.sno,avg = avg(grade)
from SC,S
where SC.sno=S.sno and S.ssex='男'
group by SC.sno
having avg(grade)>80

不要去命名列名

只有在下列情况下,才必须命名 CREATE VIEW 中的列:当列是从算术表达式、函数或常量派生的,两个或更多的列可能会具有相同的名称(通常是因为联接),视图中的某列被赋予了不同于派生来源列的名称。还可以在 SELECT 语句中指派列名。

如果未指定 column,则视图列将获得与 SELECT 语句中的列相同的名称。


你都说了当列是函数时必须命名列,怎么倒没有命名列???

#8
Kendy1234562007-04-17 12:03
楼上说的对
#9
trhuang2007-04-21 13:25

我在用GROUP BY语句是老是碰到这样的错误:列 's.no' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
刚学,不懂什么意思,能解释一下吗?要怎样解决?

#10
边城路人2007-04-21 13:44

字段名不对吧

#11
边城路人2007-04-21 13:44

字段名不对吧

1