【发布时间】:2011-03-14 02:44:34
【问题描述】:
在 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”时,“中位数”列与“数字”列相同。我使用类似的表达式来计算模式,它在同一个公用表表达式上运行良好。
【问题讨论】:
标签: sql sql-server sql-server-2008 median common-table-expression