SQL Server 下取中位数(中位值)的方法

上一篇 / 下一篇  2012-10-08 10:08:56 / 个人分类:数据库

51Testing软件测试网z^:~ X)s/vv\

  中位数是指将数据按大小顺序排列起来,形成一个数列,居于数列中间位置的那个数据。中位数用Me表示。51Testing软件测试网 R*Y/b0Ah-t)Ef+u

51Testing软件测试网s1yAT1_JBRJ

  从中位数的定义可知,所研究的数据中有一半小于中位数,一半大于中位数。中位数的作用与算术平均数相近,也是作为所研究数据的代表值。在一个等差数列或一个正态分布数列中,中位数就等于算术平均数。

m`)pt(E-N2av{051Testing软件测试网:@E5`5K2h

  在数列中出现了极端变量值的情况下,用中位数作为代表值要比用算术平均数更好,因为中位数不受极端变量值的影响;如果研究目的就是为了反映中间水平,当然也应该用中位数。在统计数据的处理和分析时,可结合使用中位数。

p} }AYx^051Testing软件测试网/T#w+~ WP7{

  将数据排序后,位置在最中间的数值。即将数据分成两部分,一部分大于该数值,一部分小于该数值。中位数的位置:当样本数为奇数时,中位数=(N+1)/2;当样本数为偶数时,中位数为N/2与1+N/2的均值 ,或求出中间两个数的平均数作为中位数。

ACW z"v8v%{051Testing软件测试网-f;EBz+F

  在Excel中有函数MEDIAN来取中位数,但是在SQLServer中则没有该内置的函数,需要用以下方法求得。

s)v1_"r-yn6v0

!}cnk^%U$CF0create table #tb(pid varchar(10),coadcladcon int)51Testing软件测试网!^-w},oOa0P
insert into #tb51Testing软件测试网-HyG M*p.R
 select 'PRAA0370',1 union all
7Rb(qZ;k{`0 select 'PRAA0370',2 union all
%z'^(f8|9r"z@ }0 select 'PRAA0370',3 union all51Testing软件测试网7d+RY~^a'L
 select 'PRAA0370',4 union all
G_#u1WH7FQ|`'I!Z0 select 'PRAA0370',5 union all
|/I#]i8d8[j-[7v-V8D0 select 'PRAA0370',6 union all51Testing软件测试网'x(l2mP9E7p
 select 'PRAA0371',1 union all51Testing软件测试网v`6` Dy }GI5d1R
 select 'PRAA0371',2 union all51Testing软件测试网}"QkhCNi
 select 'PRAA0371',3 union all51Testing软件测试网 R+B|.hFGsp
 select 'PRAA0371',4 union all51Testing软件测试网]1_:S }"~%E'q
 select 'PRAA0371',5 union all51Testing软件测试网#zVg P4m r:f
 select 'PRAA0371',6 union all51Testing软件测试网,W J&mmFv(y-z+fQ[
 select 'PRAA0371',7
51Testing软件测试网Uu3{:j:Mf i"d F7V

51Testing软件测试网YD@\z${!`+HI#i%E/^_

WITH OrdersRN AS51Testing软件测试网Sybu%{RD#~Czh
(
?'ou5e!K)S\6}W0  SELECT pid, coadcladcon,
3y*\'RL\#P5N d*`0    ROW_NUMBER() OVER(PARTITION BY pid ORDER BY coadcladcon) AS RowNum,51Testing软件测试网 UV$Dp}?3{:JO
    COUNT(*) OVER(PARTITION BY pid) AS Cnt51Testing软件测试网7Ng%f+Gw&u_r7t.|q7z5w
  FROM #tb
PSqB[)Nf!Z7Q0)51Testing软件测试网/q(Q h1mW6`2J
select pid,avg(coadcladcon) coadcladcon from (51Testing软件测试网3QwDH,o| o[y%G
SELECT pid,coadcladcon,RowNum,Cnt51Testing软件测试网 @Y(qR,J'p$d$k
FROM OrdersRN o
e,N&n:|/i"QOt0WHERE RowNum IN((Cnt + 1) / 2,(Cnt + 2) / 2)
N]8Z#qU9DmT0)a51Testing软件测试网O/r$@-Z}7e:z
group by pid
51Testing软件测试网:z/D.qct{(M


TAG:

 

评分:0

我来说两句

Open Toolbar