Вычислить среднюю медиану в SQL Server 2012 - PullRequest
0 голосов
/ 31 октября 2018

Допустим, я хочу вычислить большую медиану для таблицы для непрерывного столбца X. Можно использовать этот фрагмент кода:

PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY X)  
    OVER (PARTITION BY 
        ?
    )
AS grand_median 

Часть OVER PARTITION BY обязательна. Почему, когда я хочу вычислить среднюю медиану? Что я могу сделать, пожалуйста? Спасибо!

PS: просто добавить некоторые искусственные данные - уже с ответом, вдохновленным @ Paweł Dyl

IF OBJECT_ID('tempdb..#Data') IS NOT NULL
    DROP TABLE #Data

CREATE TABLE #Data
(
    Number FLOAT,
)

INSERT INTO #Data (Number) VALUES (30);
INSERT INTO #Data (Number) VALUES (20);
INSERT INTO #Data (Number) VALUES (42);
INSERT INTO #Data (Number) VALUES (42);
INSERT INTO #Data (Number) VALUES (42);
INSERT INTO #Data (Number) VALUES (43);
INSERT INTO #Data (Number) VALUES (40);

SELECT * FROM #Data

SELECT DISTINCT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY Number) OVER() FROM #Data

Некоторый код R, чтобы «проверить» это:

test <- c(30, 20, 42, 42, 42, 42, 40)
median(test)

Правильный ответ, конечно, 42.

1 Ответ

0 голосов
/ 31 октября 2018

OVER является обязательным, PARTITION BY не является обязательным. См. MSDN и следующую демонстрационную версию:

DECLARE @table TABLE
(
    X int
)

INSERT @table VALUES (1),(2),(3),(4),(5),(10),(12)

SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY X) OVER() FROM @table
...