在 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”时,“中值”列与“数字”列相同。我使用一个类似的表达式来计算模式,它在同一个公用表表达式上工作得很好。