2010-10-12 30 views
0

这里是我的表如何编写与中位数

ST NUM 
1 1 
1 2 
1 2 
2 1 
2 2 
2 2 
3 2 
3 8 

我想返回查询它返回NUM的中位数为每ST

ST NUM 
1 2 
2 2 
3 5 

我已经有一个中线的交叉表查询功能

SELECT 
CONVERT(DECIMAL(10,2), (
(CONVERT (DECIMAL(10,2), 
(SELECT MAX(num) FROM 
(SELECT TOP 50 PERCENT num FROM dbo.t ORDER BY num ASC) AS H1) 
+ 
(SELECT MIN(sortTime) FROM 
(SELECT TOP 50 PERCENT num FROM dbo.t ORDER BY num DESC) AS H2) 
)))/2) AS Median 

如何做到这一点的任何提示?

回答

2

试试这个

With 
MedianResult 
as 
(
Select 
ST,NUM , 
Row_Number() OVER(Partition by ST Order by NUM) as A, 
Row_Number() OVER(Partition by ST Order by NUM desc) as B 
from **YourTableName** 

) 
Select ST, Avg(NUM) as Median 
From MedianResult 
Where Abs(A-B)<=1 
Group by ST