回 帖 发 新 帖 刷新版面

主题:[原创]liupeisong先生,请问一个SQL问题

有两个表B1和B2,结构如下:
B1(sid,sname,age,classID) 字段分别为学号,姓名,年龄,班级号
B2(classID,clage)   字段分别为班级号和班级平均年龄
分别给两个表插入记录如下:
insert into B1 values('18102','刘培松',40,'182')
... ...
insert into B2 values('181',null)
... ...

请问liupeisong先生,现在B1里有若干个班级的许多学生信息,B2中有若干个班级的班号,如何用update语句从B1中计算各班的平均年龄并存入B2的对应班级中?

冒昧提问了,实在唐突,乞盼见谅赐教!

回复列表 (共8个回复)

沙发

update B2 SET clage=a.age from (select classID,AVG(age) from B1 GROUP BY 1 ORDER BY 1) as a where B2.classID=a.classID

板凳

谢谢hw2007name大哥,这也是我感兴趣的问题,但执行结果显示下列错误,不知道该怎样解决?
"GROUP BY 表达式必须引用出现在选择列表中的列名。"

3 楼

晕喔,最近潜水比较多,还有人点名!
以下在VFP9中通过

建立测试表
CREATE TABLE b1 (sid c(5) ,sname c(8),age n(3),classID c(3))
CREATE TABLE b2 (classID c(3),clage n(3) NULL)
录入测试数据
insert into B1 values('18102','刘培松',40,'182')
insert into B1 values('18103','刘培松2',20,'181')
insert into B1 values('18104','刘培松4',30,'181')
insert into B2 values('181',null)
insert into B2 values('181',null)
填表(B2)
UPDATE b2 SET clage=(select AVG(age) from b1 WHERE b2.classid=b1.classid )

4 楼

update B2 SET clage=a.age from (select classID,AVG(age) as age from B1 GROUP BY 1 ORDER BY 1) as a where B2.classID=a.classID

5 楼

UPDATE b2 SET clage=(select AVG(age) from b1 WHERE classid=b2.classid )

先生不要笑我,虽然改动不大,能使其更加完美

6 楼

再次感谢hw2007name大哥,我试了,执行结果还是显示下列错误,不知道该怎样解决?
"GROUP BY 表达式必须引用出现在选择列表中的列名。"

7 楼

谢谢hw2007name老师,您的程序经我修改如下后运行通过.
update B2 SET clage=age from (select classID,AVG(age) as age from B1 GROUP BY classID) as a where B2.classID=a.classID

8 楼

也感谢liupeisong老师和deadfoxer老弟,你们的语句更简练.

我来回复

您尚未登录,请登录后再回复。点此登录或注册