【问题标题】:Need Median to follow Group By Case需要 Median 来关注 Group By Case
【发布时间】:2017-05-22 18:38:16
【问题描述】:

我想知道是否可以在为每个 DonorType 组运行中值计算时获得一些帮助。通过查询,我得到的只是所有值的中位数,而不是每个案例分组的值。我尝试了几件事并环顾四周,但我被卡住了。

这是我得到的:

SELECT DonorType = CASE WHEN [Criteria1] THEN 'AutoRecurring'
                    WHEN [Criteria2] THEN 'ManualRecurring'
                    ELSE 'NonRecurring' END,
COUNT(DISTINCT AccountNumber) AS TotalDonors, MIN(TotalDonationAmount) AS MinAmount,
MAX(TotalDonationAmount) AS MaxAmount, AVG(TotalDonationAmount) AS AvgAmount,
((SELECT MAX(TotalDonationAmount) 
    FROM (SELECT TOP 50 PERCENT TotalDonationAmount 
        FROM #TempDonors
     ORDER BY TotalDonationAmount) AS BottomHalf)
+ (SELECT MIN(TotalDonationAmount) 
    FROM (SELECT TOP 50 PERCENT TotalDonationAmount 
        FROM #TempDonors
        ORDER BY TotalDonationAmount DESC) AS TopHalf)) / 2 AS MedAmount
FROM #TempDonors
WHERE TotalDonationAmount > 0
GROUP BY CASE WHEN [Criteria1] THEN 'AutoRecurring'
                WHEN [Criteria2] THEN 'ManualRecurring'
                ELSE 'NonRecurring' END

非常感谢您的帮助。如果有另一个帖子问这个问题(我确定有,我只是不知道要搜索什么),请务必发布链接 - 对于我无法找到它,我提前道歉。

保重!

【问题讨论】:

    标签: sql-server group-by case median


    【解决方案1】:

    您需要将中位数计算与外部查询相关联。

    看起来像这样:

    ...
    ((SELECT MAX(TotalDonationAmount) 
        FROM (SELECT TOP 50 PERCENT TotalDonationAmount 
            FROM #TempDonors t1
            WHERE CASE WHEN t.[Criteria1] THEN 'AutoRecurring'
                    WHEN t.[Criteria2] THEN 'ManualRecurring'
                    ELSE 'NonRecurring' END=CASE WHEN t1.[Criteria1] THEN 'AutoRecurring'
                    WHEN t1.[Criteria2] THEN 'ManualRecurring'
                    ELSE 'NonRecurring' END
         ORDER BY TotalDonationAmount) AS BottomHalf)
    + (SELECT MIN(TotalDonationAmount) 
        FROM (SELECT TOP 50 PERCENT TotalDonationAmount 
            FROM #TempDonors t2
            WHERE CASE WHEN t.[Criteria1] THEN 'AutoRecurring'
                    WHEN t.[Criteria2] THEN 'ManualRecurring'
                    ELSE 'NonRecurring' END=CASE WHEN t2.[Criteria1] THEN 'AutoRecurring'
                    WHEN t2.[Criteria2] THEN 'ManualRecurring'
                    ELSE 'NonRecurring' END
            ORDER BY TotalDonationAmount DESC) AS TopHalf)) / 2 AS MedAmount
    FROM #TempDonors
    WHERE TotalDonationAmount > 0
    GROUP BY CASE WHEN [Criteria1] THEN 'AutoRecurring'
                    WHEN [Criteria2] THEN 'ManualRecurring'
                    ELSE 'NonRecurring' END
    

    【讨论】:

    • 我很快就会试一试。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 2017-03-22
    • 2021-03-15
    • 2013-11-19
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多