使用 PERCENTILE_CONT SQL 从十进制列中检索中位数

Retrieve the Median from a decimal column using PERCENTILE_CONT SQL

我有一个 table 价格像:

ID                   PurchasePriceCalc
0146301              0.002875161
00006L00             0.00396
00087G03             NULL
00001G04             0.0020004
00006S               0.003689818
01580h01             NULL
00082EE00            0.002462687
00038R05             0.002237565
01666R01             0.002666667

我想得到每个 PurchasePriceCalc 的中位数,然后用 PurchasePriceCalc 减去结果,为了更好地解释公式应该是:(PurchasePriceCalc - Median(PurchasePriceCalc))。

我正在使用下面的查询但无法正常工作:

SELECT ID,PurchasePriceCalc, PurchasePriceCalc - PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY PurchasePriceCalc)
                         OVER (PARTITION BY ID) AS MediaCalc   FROM Prices

输出应该是这样的(黄色列)。

任何协助或帮助将不胜感激!

我想问题出在 OVER (PARTITION BY ID) 上。如果 ID 是唯一的,那么每组只包含一行,这就是为什么所有值都等于 0/NULL。

您应该删除 PARTITION BY 部分。

SELECT ID,PurchasePriceCalc, 
 PurchasePriceCalc - PERCENTILE_CONT(0.5)
                   WITHIN GROUP(ORDER BY PurchasePriceCalc) OVER () AS MediaCalc 
FROM Prices;