首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求平均分有关问题

2012-02-20 
求平均分问题表1ID数学   英文   语文学生编号1   80    8065    12   60    8042    13   808094    14  

求平均分问题
表1
ID           数学   英文   语文         学生编号
1   80    80                   65    1
2   60    80                   42    1
3   80                 80                   94    1
4   90                 80                   54    2

表2
编号     名字
1       张三
2   李四

我想求出张三每项的平均分来

得出

张三  数学平均   英文平均   语文平均

谁能教下。谢谢了

[解决办法]
create table t1(id int,math int,english int,chinese int,num int)
insert into t1
select 1,80,80,65,1 union all
select 2,60,80,42,1 union all
select 3,80,80,94,1 union all
select 4,90,80,54,2

create table t2(num int,name varchar(10))
insert into t2
select 1, 'zhang3 ' union all
select 2, 'li4 '

select name,avg(math) as math,avg(english) as english,avg(chinese) as chinese
from t1 inner join t2 on t1.num=t2.num
where name= 'zhang3 ' --不加條件取所有人的平均分
group by name

/*
name math english chinese
---------- ----------- ----------- -----------
zhang3 73 80 67
*/
drop table t1,t2
[解决办法]
if object_id( 'pubs..表1 ') is not null
drop table 表1
go

create table 表1(ID int,数学 int,英文 int,语文 int,学生编号 int)
insert into 表1(ID,数学,英文,语文,学生编号) values(1,80,80,65,1)
insert into 表1(ID,数学,英文,语文,学生编号) values(2,60,80,42,1)
insert into 表1(ID,数学,英文,语文,学生编号) values(3,80,80,94,1)
insert into 表1(ID,数学,英文,语文,学生编号) values(4,90,80,54,2)

if object_id( 'pubs..表2 ') is not null
drop table 表2
go

create table 表2(编号 int,名字 varchar(10))
insert into 表2(编号,名字) values(1, '张三 ')
insert into 表2(编号,名字) values(2, '李四 ')

select 表2.名字 , isnull(数学平均分,0) 数学平均分 , isnull(英文平均分,0) 英文平均分 , isnull(语文平均分 , 0) 语文平均分 from 表2
left join
(
select 学生编号,cast(avg(数学) as decimal(18,2)) as 数学平均分 , cast(avg(英文) as decimal(18,2)) as 英文平均分 , cast(avg(语文) as decimal(18,2)) as 语文平均分 from 表1 group by 学生编号
) t
on 表2.编号 = t.学生编号

drop table 表1,表2

/*
名字 数学平均分 英文平均分 语文平均分
---------- -------------------- -------------------- --------------------
张三 73.00 80.00 67.00
李四 90.00 80.00 54.00

(所影响的行数为 2 行)

*/
[解决办法]
上面两个答案都是对的,关键是两个表要按学生编号进行连接,可以是左连,也可以是内连,与id不断增长无关系,楼主看看语法吧.
inner join
left join

热点排行
Bad Request.