【问题标题】:How can I exclude zeroes in my Median calculation in this specific context?在这种特定情况下,如何在我的中位数计算中排除零?
【发布时间】:2019-05-22 05:51:57
【问题描述】:

我正在使用 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

预期输出:

【问题讨论】:

  • your_column != 0 ..?
  • 我明白这一点,但我需要将零包含在我将在 SAME 查询中使用的另一个函数中。
  • 在 WHERE 条件下尝试了以下操作,但没有得到预期的输出:WHERE [F&B] 0 AND [SPA] 0
  • 您将需要使用子查询和/或 CTE 来排除中值结果的 0,然后将它们加入到您的其他结果中。

标签: sql sql-server median


【解决方案1】:

只要使用条件:

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 值,所以这应该是最简单的方法。

【讨论】:

  • 我非常喜欢这个!简单有效。
【解决方案2】:

试试

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 2018-12-26
    • 2015-04-07
    • 2013-12-10
    相关资源
    最近更新 更多