新手想写以下代码,(对系统的标准差算法有质疑,自己写的算法)有错误请帮忙纠正
SELECT ID,M1,M2,M3,M4,M5,M6
,(M1+M22+M33+M44+M55+M6)/6 AS [平均数]
MEDIAN(M1:M6) AS [方差] ---有错误请帮忙纠正
,SQRT([方差]) AS [标准差]
FROM TB9
手工用EXCEL统计结果如下
ID M1 M2 M3 M4 M5 M6 平均数 方差 标准差
1 60 43 21 34 28 60 35.28571429 34.64285714 5.885818307
2 42 53 22 47 28 43 32.33333333 37.16666667 6.096447053
3 60 51 23 46 28 61 35.16666667 40.58333333 6.370504951
4 60 54 24 49 28 43 36.5 39.75 6.304760106
5 42 47 25 42 28 61 31.5 36.75 6.062177826
6 51 47 26 41 28 43 33.16666667 37.08333333 6.089608635
7 42 43 27 39 27 61 30.83333333 34.91666667 5.909032634
8 42 44 28 40 27 43 31.5 35.75 5.979130372
9 60 52 29 48 27 61 37.5 42.75 6.538348415
10 51 43 30 38 27 43 33.16666667 35.58333333 5.965176723
11 42 45 31 37 27 61 32.16666667 34.58333333 5.880759588
12 42 47 32 42 27 43 33.66666667 37.83333333 6.150880696
13 69 55 33 48 27 61 40.83333333 44.41666667 6.664583008
14 51 42 34 36 27 43 34 35 5.916079783
15 42 49 35 40 27 61 34.66666667 37.5 6.123724357
16 51 49 36 42 27 43 36.83333333 39.41666667 6.278269401
17 33 47 37 42 27 61 33.83333333 35.41666667 5.951190357能用SQL完成以下结果就好
请教问题一:在SQL2005版本上执行函数后,怎样取函数值的小数点后2位
问题二:我的方差计算取数的语句有错误如何修改
ID M1 M2 M3 M4 M5 M6 平均数 方差 标准差
1 60 43 21 34 28 60 35.29 34.64 5.89
2 42 53 22 47 28 43 32.33 37.17 6.10
3 60 51 23 46 28 61 35.17 40.58 6.37
4 60 54 24 49 28 43 36.50 39.75 6.30
5 42 47 25 42 28 61 31.50 36.75 6.06
6 51 47 26 41 28 43 33.17 37.08 6.09
7 42 43 27 39 27 61 30.83 34.92 5.91
8 42 44 28 40 27 43 31.50 35.75 5.98
9 60 52 29 48 27 61 37.50 42.75 6.54
10 51 43 30 38 27 43 33.17 35.58 5.97
11 42 45 31 37 27 61 32.17 34.58 5.88
12 42 47 32 42 27 43 33.67 37.83 6.15
13 69 55 33 48 27 61 40.83 44.42 6.66
14 51 42 34 36 27 43 34.00 35.00 5.92
15 42 49 35 40 27 61 34.67 37.50 6.12
16 51 49 36 42 27 43 36.83 39.42 6.28
17 33 47 37 42 27 61 33.83 35.42 5.95
SELECT ID,M1,M2,M3,M4,M5,M6
,(M1+M22+M33+M44+M55+M6)/6 AS [平均数]
MEDIAN(M1:M6) AS [方差] ---有错误请帮忙纠正
,SQRT([方差]) AS [标准差]
FROM TB9
手工用EXCEL统计结果如下
ID M1 M2 M3 M4 M5 M6 平均数 方差 标准差
1 60 43 21 34 28 60 35.28571429 34.64285714 5.885818307
2 42 53 22 47 28 43 32.33333333 37.16666667 6.096447053
3 60 51 23 46 28 61 35.16666667 40.58333333 6.370504951
4 60 54 24 49 28 43 36.5 39.75 6.304760106
5 42 47 25 42 28 61 31.5 36.75 6.062177826
6 51 47 26 41 28 43 33.16666667 37.08333333 6.089608635
7 42 43 27 39 27 61 30.83333333 34.91666667 5.909032634
8 42 44 28 40 27 43 31.5 35.75 5.979130372
9 60 52 29 48 27 61 37.5 42.75 6.538348415
10 51 43 30 38 27 43 33.16666667 35.58333333 5.965176723
11 42 45 31 37 27 61 32.16666667 34.58333333 5.880759588
12 42 47 32 42 27 43 33.66666667 37.83333333 6.150880696
13 69 55 33 48 27 61 40.83333333 44.41666667 6.664583008
14 51 42 34 36 27 43 34 35 5.916079783
15 42 49 35 40 27 61 34.66666667 37.5 6.123724357
16 51 49 36 42 27 43 36.83333333 39.41666667 6.278269401
17 33 47 37 42 27 61 33.83333333 35.41666667 5.951190357能用SQL完成以下结果就好
请教问题一:在SQL2005版本上执行函数后,怎样取函数值的小数点后2位
问题二:我的方差计算取数的语句有错误如何修改
ID M1 M2 M3 M4 M5 M6 平均数 方差 标准差
1 60 43 21 34 28 60 35.29 34.64 5.89
2 42 53 22 47 28 43 32.33 37.17 6.10
3 60 51 23 46 28 61 35.17 40.58 6.37
4 60 54 24 49 28 43 36.50 39.75 6.30
5 42 47 25 42 28 61 31.50 36.75 6.06
6 51 47 26 41 28 43 33.17 37.08 6.09
7 42 43 27 39 27 61 30.83 34.92 5.91
8 42 44 28 40 27 43 31.50 35.75 5.98
9 60 52 29 48 27 61 37.50 42.75 6.54
10 51 43 30 38 27 43 33.17 35.58 5.97
11 42 45 31 37 27 61 32.17 34.58 5.88
12 42 47 32 42 27 43 33.67 37.83 6.15
13 69 55 33 48 27 61 40.83 44.42 6.66
14 51 42 34 36 27 43 34.00 35.00 5.92
15 42 49 35 40 27 61 34.67 37.50 6.12
16 51 49 36 42 27 43 36.83 39.42 6.28
17 33 47 37 42 27 61 33.83 35.42 5.95
2、关于方差查看
http://aawwmate.blog.163.com/blog/static/7752825620101631746837/
,cast((M1+M22+M33+M44+M55+M6)/6 as decimal(18,2)) AS [平均数]
,cast(MEDIAN(M1:M6) as decimal(18,2)) AS [方差]
,cast(SQRT([方差]) as decimal(18,2)) AS [标准差]
FROM TB9
((M1-[平均数])*(M1-[平均数])+(M1-[平均数])*(M1-[平均数])+(M1-[平均数])*(M1-[平均数])+(M1-[平均数])*(M1-[平均数])+(M1-[平均数])*(M1-[平均数])+(M1-[平均数])*(M1-[平均数]))/6 AS [方差]用函数MEDIAN计算[方差]我用的是MEDIAN(M1:M6) AS [方差] ,有错误但不知道如何改,请教
- -!median是中位数,不是方差,而且具体有这个函数?
, [平均数],[方差],sqrt([方差]) as 标准差
from
(SELECT ID,M1,M2,M3,M4,M5,M6,(M1+M22+M33+M44+M55+M6)/6 AS [平均数],
(power((M1-[平均数]),2)+power((M2-[平均数]),2)+power((M3-[平均数]),2)+power((M4-[平均数]),2)+(power((M5-[平均数]),2)+power((M1-[平均数]),2))/6 AS [方差]
from
(SELECT ID,M1,M2,M3,M4,M5,M6
,(M1+M22+M33+M44+M55+M6)/6 AS [平均数]
FROM TB9 ) as a--内层嵌套 算平均数
) as b --外层嵌套 算方差
--最后算标准差
当然还在cast( aa as decimal(18,2))
1、将表数据行列转化
id1 id2 ……
M1 * *
M2 *
M3
M4
M5
M6
2、用函数VAR:返回值的统计方差。
SELECT VAR(id1),VAR(id2),……FROM TB
SELECT ID,M1,M2,M3,M4,M5,M6
,cast((M3+M4)/2 as decimal(18,2)) AS [中位数]
,cast((M1+M2+M3+M4+M5+M6)/6 as decimal(18,2)) AS [平均数]
,cast(MEDIAN(M1:M6) as decimal(18,2)) AS [方差]
,cast(SQRT([方差]) as decimal(18,2)) AS [标准差]
FROM TB9
但结果
消息 102,级别 15,状态 1,第 4 行
'M1' 附近有语法错误。
select ID,M1,M2,M3,M4,M5,M6, [平均数],[方差],cast(sqrt([方差]) as decimal(18,2)) as 标准差
from
(SELECT ID,M1,M2,M3,M4,M5,M6,[平均数],
cast(((power((M1-[平均数]),2)+power((M2-[平均数]),2)+power((M3-[平均数]),2)+power((M4-[平均数]),2)+(power((M5-[平均数]),2)+power((M1-[平均数]),2))/6) as decimal(18,2)) AS [方差]
from
(SELECT ID,M1,M2,M3,M4,M5,M6,cast((M1+M2+M3+M4+M5+M6)/6 as decimal(18,2)) AS [平均数] FROM TB9 ) as a--内层嵌套 算平均数
) as b --外层嵌套 算方差
--最后算标准差
执行结果
消息 156,级别 15,状态 1,第 5 行
关键字 'AS' 附近有语法错误。
消息 156,级别 15,状态 1,第 9 行
关键字 'as' 附近有语法错误。
谢谢12楼,执行结果
消息 156,级别 15,状态 1,第 5 行
关键字 'as' 附近有语法错误。
消息 1035,级别 15,状态 10,第 8 行
'cast' 附近有语法错误,需要 'AS'。
测试很多,如果直接在SQL算的话,全部取整了。如果直接赋值的话,则可以。
但在不改变数值的情况下,可以乘以一个很接近于1 的数,但小数多个,则可以。
你可根据下例子去修改。
上面出错应该是括号的原因,因没有表结构,所以没运行。
declare @var float
declare @i float
set @i=1.00000001
set @var=(20*@i)/6 --这里乘以@i ,值基本无改变,但却变为浮点数了
select @var 原值,cast(@var as real) 再转,cast(@var as decimal(18,2)) 四舍五入GO
原值 再转 四舍五入
---------------------- ------------- ---------------------------------------
3.33333336666667 3.333333 3.33(1 行受影响)