一個統計平均數的SQL語句

勉励前行 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
...全文
68 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
勉励前行 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速度快點吧。
勉励前行 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

----------------------
愉快的登山者 2003-05-14
  • 打赏
  • 举报
回复
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


34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧