在MSSQL2008,我試圖採用經典的中位數查詢如下計算一列數的中位數從公共表表達式:計算平均
WITH cte AS
(
SELECT number
FROM table
)
SELECT cte.*,
(SELECT
(SELECT (
(SELECT TOP 1 cte.number
FROM
(SELECT TOP 50 PERCENT cte.number
FROM cte
ORDER BY cte.number) AS medianSubquery1
ORDER BY cte.number DESC)
+
(SELECT TOP 1 cte.number
FROM
(SELECT TOP 50 PERCENT cte.number
FROM cte
ORDER BY cte.number DESC) AS medianSubquery2
ORDER BY cte.number ASC))/2)) AS median
FROM cte
ORDER BY cte.number
的結果集我得到的是以下幾點:
NUMBER MEDIAN
x1 x1
x1 x1
x1 x1
x2 x2
x3 x3
換句話說,「中間」列是一樣的「號碼」一欄時,我希望中位數列是「X1」一路下跌。我使用類似的表達式來計算模式,它在相同的公用表表達式上工作正常。
我在查詢中看到的唯一區別是在公用表表達式中添加了WHERE子句,我不確定WHERE子句應該做什麼。 – Dan 2010-07-09 22:34:20
啊,我不明白指定CTE名稱作爲限定符有這種效果。在實踐中,我使用兩列進行製圖,所以恆定的中值對於在第一個系列的中值處繪製橫跨圖表的第二個系列非常有用。 感謝您的幫助。 – Dan 2010-07-09 22:44:41
從技術上講,輸出不正確。 1023.50應該是中位數。因此,如果您有偶數行並需要進行除法,您是否不需要將Number轉換爲小數或浮點數(例如Number * 1.000)? – Thomas 2010-07-10 01:51:10