日期:2014-05-18  浏览次数:20466 次

求平均分问题
表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