• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

一個統計平均數的SQL語句

PPower 2003-05-14 03:52:25
如下表:
工件 誤差
A +0.10
A +0.20
A -0.36
A -0.10
B +1.0
B +0.8

現在要算平均誤差,結果如下表:

工件 平均誤差 正平均誤差 負平均誤差
A -0.04 +0.15 -0.24
B +0.9 +0.9 0

求SQL
...全文
35 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
PPower 2003-05-15
最後使用的語句是:
select 工件,
avg(误差) as 平均误差,
avg(case when 误差 > 0 then 误差 else NULL end) as 正误差,
avg(case when 误差 < 0 then 误差 else NULL end) as 负误差
from table
group by 工件
或者:
select 工件,
(select avg(誤差) from t where 工件 = a.工件) as 平均误差,
(select avg(誤差) from t where 工件 = a.工件 and 誤差 > 0 ) as 正平均误差,
(select avg(誤差) from t where 工件 = a.工件 and 誤差 < 0 ) as 负平均误差
from t as a
group by 工件

我想,使用case速度快點吧。
回复
PPower 2003-05-14
試了下,用子查詢的能成功,可用Case的不行。
回复
BBQ 2003-05-14
以上几位都不错

偶只能帮忙UP
回复
BBQ 2003-05-14
结果有错:

----------------

現在要算平均誤差,結果如下表:

工件 平均誤差 正平均誤差 負平均誤差
A -0.04 +0.15 -0.24(---------------------应该为-0.23)
B +0.9 +0.9 0

----------------------
回复
select 工件,
avg(误差) as 平均误差,
(select avg(誤差) from t where 工件=a.工件 and 誤差>=0) as 正平均误差,
(select avg(誤差) from t where 工件=a.工件 and 誤差<=0) as 负平均误差
from table a
group by 工件
回复
firetoucher 2003-05-14
好多,算了,我就只up一下的了。
回复
triout 2003-05-14
select 工件,avg(误差) as 平均误差,
(select avg(误差) from tablename b where a.工件=b.工件 and b.误差>=0) as 正误差,
(select avg(误差) from tablename c where a.工件=c.工件 and c.误差<0) as 负误差
from tablename a group by 工件
回复
triout 2003-05-14
select a.工件,a.平均误差,b.正误差,c.负误差
from
(select 工件,avg(误差) as 平均误差 from tablename group by 工件) a
inner join
(select 工件,avg(误差) as 正误差 from tablename where 误差>=0 group by 工件) b
on a.工件=b.工件
inner join
(select 工件,avg(误差) as 正误差 from tablename where 误差<0 group by 工件) c
on a.工件=c.工件
回复
happydreamer 2003-05-14

select 工件,
(select avg(誤差) from t where 工件=a.工件) as 平均误差,
(select avg(誤差) from t where 工件=a.工件 and 誤差>=0) as 正平均误差,
(select avg(誤差) from t where 工件=a.工件 and 誤差<=0) as 负平均误差
from t as a
group by 工件
回复
DainelLee 2003-05-14
前面的语句要加 Distinct

这个也可以:
select 工件,
avg(误差) as 平均误差,
avg(case when 误差>=0 then 误差 else 0) as 正误差,
avg(case when 误差<=0 then 误差 else 0) as 负误差
from table
group by 工件
回复
DainelLee 2003-05-14
select 工件,
(select avg(误差) from table where 工件=a.工件) as 平均误差,
(select avg(误差) from table where 工件=a.工件 and 误差>=0) as 正平均误差,
(select avg(误差) from table where 工件=a.工件 and 误差<=0) as 负平均误差
from table as a


回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2003-05-14 03:52
社区公告
暂无公告