再发一贴,求助sql,查询偏离平均值一定范围的数据

cow8063 2010-01-26 03:30:00
表结构:
id data
1 1.1
1 1.3
1 1.2
......
1 100
1 1.1

2 100
2 101
2 99
2 99.5
2 999


例表中ID1的平均值应该是1-1.5,但是有一个数据是100是不合法的,ID2同理,999的那一项数据偏离平均值过多不合法

怎么通过SQL语句查出这种非法数据并删除呢

######注:尽量一条SQL########
...全文
137 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhujinqiang 2010-01-27
  • 打赏
  • 举报
回复
关注。
nianran520 2010-01-26
  • 打赏
  • 举报
回复
delete t
from [tb] t
where data > (select avg(data) from tb where id=t.id)
cow8063 2010-01-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xman_78tom 的回复:]
SQL code
;with cteas(select*,[avg]=avg(data)over (partitionby id)from tabname
)deletefrom ctewhere data<=[avg]-10or data>=[avg]+10;
[/Quote]
谢谢了,不过是不是贴不完整呀
xman_78tom 2010-01-26
  • 打赏
  • 举报
回复

;with cte as(
select *,[avg]=avg(data) over (partition by id) from tabname
)
delete from cte where data<=[avg]-10 or data>=[avg]+10;
cow8063 2010-01-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 beirut 的回复:]
偏离的标准是多少?
[/Quote]
标准不确定,一般是平均值加减一个数,为了方便,标准定为+/- 10吧
Mr_Nice 2010-01-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 cow8063 的回复:]
表结构:
id    data
1      1.1
1      1.3
1      1.2
......
1      100
1      1.1

2      100
2      101
2      99
2      99.5
2      999


例表中ID1的平均值应该是1-1.5,但是有一个数据是100是不合法的,ID2同理,999的那一项数据偏离平均值过多不合法

怎么通过SQL语句查出这种非法数据并删除呢

######注:尽量一条SQL########
[/Quote]

lz 咋发了贴就消失了呢?
--小F-- 2010-01-26
  • 打赏
  • 举报
回复
怎么确定你的平均值?
黄_瓜 2010-01-26
  • 打赏
  • 举报
回复
偏离的标准是多少?

34,590

社区成员

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

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