我需要找到一列的中位數,并且答案需要四舍五入到小數點后 4 位。由于 sql server 沒有“MEDIAN()”函式,我需要從串列的前 50% 中獲取最小的數字,并從串列的底部 50% 中獲取最大的數字,然后除以 2。
我試著這樣做:
SELECT(
(SELECT CAST(ROUND(MAX(LAT_N), 4) AS DECIMAL(8, 4))
FROM (SELECT TOP 50 PERCENT LAT_N FROM STATION ORDER BY LAT_N ASC) AS Bottom1)
(SELECT CAST(ROUND(MIN(LAT_N), 4) AS DECIMAL(8, 4))
FROM (SELECT TOP 50 PERCENT LAT_N FROM STATION ORDER BY LAT_N DESC) AS Top1)) / 2;
但結果是 5.323200 而不是 5.3232。
我也試過這個:
SELECT(
(SELECT CAST(ROUND(MAX(LAT_N), 4) AS DECIMAL(8, 4))
FROM (SELECT TOP 50 PERCENT (LAT_N / 2) AS LAT_N FROM STATION ORDER BY LAT_N ASC) AS Bottom1)
(SELECT CAST(ROUND(MIN(LAT_N), 4) AS DECIMAL(8, 4))
FROM (SELECT TOP 50 PERCENT (LAT_N / 2) AS LAT_N FROM STATION ORDER BY LAT_N DESC) AS Top1));
這個答案似乎很接近,但是通過將最小值和最大值相除,我最終失去了 0.0001,這使得答案錯誤。
為了從表格中獲取中位數,我該如何解決我正在嘗試的任何一種方式。還是有其他方法可以做到這一點?
uj5u.com熱心網友回復:
我一直在閱讀 Itzik Ben-Gan 的 T-SQL Querying,最近遇到了 BI 部分。我相信這就是你想要的。這就是他解釋獲得中位數的方式。他稱之為財務中位數。您的另一個選擇是查看 PERCENTILE_DISC 而不是 PERCENTILE_CONT,如下所示。
CREATE TABLE #Test (
[Id] INT IDENTITY(1,1) CONSTRAINT PK_Id PRIMARY KEY,
[Cost] DECIMAL(19,4) NOT NULL
);
INSERT INTO #Test([Cost])
VALUES (5),(10),(15);
SELECT DISTINCT
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY [Cost]) OVER () AS median
FROM #Test
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/522414.html
標籤:sql服务器中位数
上一篇:如何使彈出視頻回應于移動設備
下一篇:更新同一張表后使用事務插入記錄?
