【发布时间】:2015-03-20 08:20:55
【问题描述】:
我已经尝试了所有可能性来计算特定列的中值,但不断从 Excel 中获得不同的值。
我正在研究 SQL2008R2
这是我迄今为止尝试过的:
SELECT Entity,
BillPeriod,
Cost,
PatientDays,
0 AS Median
FROM GroupCTE
UNION
SELECT Entity,
BillPeriod,
Cost,
PatientDays,
0 AS Median
FROM RegionCTE
UNION
SELECT Entity,
BillPeriod,
Cost,
PatientDays,
0 AS Median
FROM InstitutionCTE
Union
SELECT 'Median' as Entity,
BillPeriod,
0 as Cost,
0 as PatientDays,
(((
(SELECT MAX(Cost) FROM
(SELECT TOP 50 PERCENT Cost FROM InstitutionCTE WHERE Cost <> 0 ORDER BY Cost ASC) AS BottomHalf)
+
(SELECT MIN(Cost) FROM
(SELECT TOP 50 PERCENT Cost FROM InstitutionCTE WHERE Cost <> 0 ORDER BY Cost DESC) AS TopHalf)
)) / 2) AS Median
我在这里做错了什么吗?
我试过这个:Function to Calculate Median in Sql Server
谢谢
【问题讨论】:
-
你可以看这个,Itzik Ben-Gan 给出了一些如何计算中位数的好例子:youtube.com/watch?v=goyWzAu-AA0
-
此计算与中位数的定义不匹配。而 Excel 中位数函数可能正在实现中位数的确切公式。所以你会看到结果的不同。
-
(1) 提供一个计算不正确的例子。 (2) 如果
cost是一个整数,那么你就是在做整数除法。 -
@GordonLinoff,与当前数据相比,与 SQL 结果相比,我得到了很大的不同:SQL - 401970.095 Excel - 397361.495。费用数据类型为浮点数。
-
计算大于和小于这些值的值的数量,并找出哪个是正确的。
标签: sql sql-server sql-server-2008-r2 median