SQL如何实现这样的效果

来源:百度知道 编辑:UC知道 时间:2024/07/08 00:10:09
create table test
(
VID int primary key,
VNum int,
vname varchar(10),
score1 int,
score2 int,
score3 int
)

select * from test

insert into test values(1,001,'大海',20,30,40)
insert into test values(2,001,'大海',30,40,50)
insert into test values(3,001,'大海',40,50,60)

1,001,‘大海’,45,60,75
也就是3个记录的平均分
就是要达到我说的那样的结果,因为是同一个001记录有3条,要计算平均分当然是3个分加起来/3了

是不是这个
select vnum,vname,avg(score1),avg(score2),avg(score3) from test t
group by vnum,vname

但是这样出来的结果是
001,‘大海’,30,40,50

这个001,‘大海’,45,60,75 平均分是3条记录加和以后除以2的结果,为什么要这样计算平均呢?

可是你给出的数据和结果明显是除以2的结果,不是除以3啊,除以3的话,我给出的SQL应该是可以得到正确结果的。

select min(VID),min(VNum),sum(score1)/3,sum(score2)/3,sum(score3)/3
from test
where VNum='001'
group by VNum

看了半天你的意思,如我理解,从你的3条记录得到一条记录1,001,‘大海’,45,60,75,其中45,60,75是每天记录分数的平均值,对吗?

可以像zfy0921仁兄那么做,如果更高明点,就重新设计表,采用树形计算方法
或者写些方法来操作这些记录

group by 进行分组后通过聚合函数sum(字段名)/3 或者用avg()都行

你小学毕业没,会计算平均值吗,哪有3个数的平均值是/2的