2012-03-09 42 views
0

可能重複:
Function to Calculate Median in Sql Server顯示中值的值從一個動態表

目標:
顯示中值的基礎上低於該代碼的值。

問題:
我沒怎麼做SQL服務器

表顯示它可以檢索在未來的新價值,所有行可以是奇數或偶數。

declare @T table 
( 
    Name varchar(50), 
    Sales int 
) 

insert into @T values 
('John',  '50'), 
('Jennifer', '15'), 
('Stella', '20'), 
('Sophia', '40'), 
('Greg',  '10'), 
('Jeff',  '20') 

回答

0

這應該工作:

SELECT AVG(tt.Sales) AS Median 
FROM (
    SELECT TOP 1 t1.* FROM 
    (SELECT TOP 50 PERCENT FROM @T ORDER BY Sales) t1 
    ORDER BY t1.Sales DESC 
    UNION 
    SELECT TOP 1 t2.* FROM 
    (SELECT TOP 50 PERCENT FROM @T ORDER BY Sales DESC) t2 
    ORDER BY t2.Sales 
) tt 

要只是顯示它,你可以做

DECLARE @Median REAL 
SELECT @Median=AVG(tt.Sales) AS Median 
FROM (
    SELECT TOP 1 t1.* FROM 
    (SELECT TOP 50 PERCENT FROM @T ORDER BY Sales) t1 
    ORDER BY t1.Sales DESC 
    UNION 
    SELECT TOP 1 t2.* FROM 
    (SELECT TOP 50 PERCENT FROM @T ORDER BY Sales DESC) t2 
    ORDER BY t2.Sales 
) tt 

PRINT CONVERT(VARCHAR, @Median) 
+0

請不要不指定長度使用VARCHAR。 http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx – 2012-03-09 16:32:34