2014-10-30 97 views
0

我正在嘗試在ssrs 2012中創建一個顯示中值成本的列。我是否正確計算我的數據集的中位數?

我一直在搜索這一段時間,並且寫了PERCENTILE_CONT查詢來嘗試實現這一點。

這是查詢我使用:

SELECT srt.Name, 
    cast(sum(sr.price) as int) as AvgCost, 
    cast(sum(sr.cost) as int) as AvgTransCost, 
    cast(avg(sr.TotalTimeSpent) as int) as TotalTimeSpent, 
    percentile_cont(.5) WITHIN GROUP(ORDER BY sum(sr.price)) OVER(PARTITION BY srt.Name) AS MedianSpend 
from 
    ServiceReq sr, ServiceReqTemplate srt 

當我運行報告,這些都是結果: If you look at the very last row, you'll notice the avgcost is $46, and the cost median is $46.25

這是中位數?爲什麼所有其他平均成本和中位數都一樣?如果我將PERCENTILE_CONT(.5)更改爲PERCENTILE_CONT(.9),則中位數列中沒有變化 - 這導致我認爲這是中位數的錯誤值:(

+0

與順序重新ORDER BY SUM(sr.price)的sr.price吧? – Arvo 2014-10-30 13:13:18

+0

我試過了,當我這樣做,它給了我「sr.price不包含在一個聚合函數或GROUP BY子句」 – QuestionQuestion 2014-10-30 13:15:30

回答

1

您正在使用PERCENTILE_CONT(繼續=連續)

計算基於SQL Server中的列的值的連續分佈的百分位數,其結果被內插,並且可能不等於任何該列中的特定的值。

http://msdn.microsoft.com/en-us/library/hh231473.aspx

而你想要的是PERCENTILE_DISC(DI SC =離散)

對於給定的百分位值P,PERCENTILE_DISC各種BY子句中的ORDER表達式的值,並返回具有最小CUME_DIST值(相對於相同的排序規範的值),其是大於或等於P.例如,PERCENTILE_DISC (0.5)將計算表達式的第50百分位數(即中位數)。

http://msdn.microsoft.com/en-us/library/hh231327.aspx

+0

我剛添加了CONT的DISC,它給了我相同的結果。 – QuestionQuestion 2014-10-30 13:20:21

+0

如何在不引起聚合函數錯誤的情況下刪除總和(sr.price)? – QuestionQuestion 2014-10-30 13:20:59