Как я могу исключить нули в моем расчете медианы в этом конкретном контексте? - PullRequest
0 голосов
/ 22 мая 2019

Я использую SQL Server 2014, и у меня есть следующий запрос T-SQL для вычисления средних значений. Однако я хочу, чтобы мой медианный синтаксис (Percentile_cont) исключал нули при выполнении вычислений. Как я могу это сделать?

CREATE TABLE #MyTempTable (Id int, Market nvarchar(50), [F&B] numeric (19,4) , SPA numeric (19,4))

INSERT INTO #MyTempTable
VALUES
(200, 'UK', 200, 0),
(210, 'UK', 150, 300),
(236, 'FRANCE', 60, 450),
(237, 'FRANCE', 120, 0),
(265, 'UK', 400, 100),
(270, 'FRANCE', 0, 140)

SELECT 
DISTINCT [Market],    
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY ([F&B])) OVER (PARTITION BY [Market]) AS 'MEDIAN_F&B',
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY ([SPA])) OVER (PARTITION BY [Market]) AS 'MEDIAN_SPA'

FROM #MyTempTable

Токовый выход:

Market  MEDIAN_F&B  MEDIAN_SPA
FRANCE    60            140
UK       200            100

Ожидаемый выход:

expected ouput

Ответы [ 2 ]

2 голосов
/ 22 мая 2019

Просто используйте условия:

SELECT DISTINCT [Market],  
       PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY NULLIF([F&B], 0)) OVER (PARTITION BY [Market]) AS [MEDIAN_F&B],
       PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY NULLIF([SPA], 0)) OVER (PARTITION BY [Market] AS [MEDIAN_SPA]
FROM #MyTempTable  ;

Функции PERCENTILE игнорируют значения NULL, поэтому это должен быть самый простой метод.

1 голос
/ 22 мая 2019

Попробуйте

SELECT [Market], [MEDIAN_F&B], [MEDIAN_SPA]
FROM 
    (SELECT 
    DISTINCT [Market], CASE [F&B] WHEN 0 THEN 0 ELSE 1 END + CASE [SPA] WHEN 0 THEN 0 ELSE 1 END g,   
    PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY ([F&B])) OVER (PARTITION BY [Market], CASE [F&B] WHEN 0 THEN 0 ELSE 1 END ) AS [MEDIAN_F&B],
    PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY ([SPA])) OVER (PARTITION BY [Market], CASE [SPA] WHEN 0 THEN 0 ELSE 1 END ) AS [MEDIAN_SPA]
    FROM #MyTempTable    
) t
WHERE g=2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...