需要中位数跟随 Group By Case
Need Median to follow Group By Case
我想知道我是否可以得到一些帮助来计算每个 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
非常感谢您的帮助。如果有另一个 post 问这个(我确定有,我只是不知道要搜索什么),无论如何只是 post link - 我道歉为我找不到它而提前。
保重!
您需要将中位数计算与外部查询相关联。
看起来像这样:
...
((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
我想知道我是否可以得到一些帮助来计算每个 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
非常感谢您的帮助。如果有另一个 post 问这个(我确定有,我只是不知道要搜索什么),无论如何只是 post link - 我道歉为我找不到它而提前。
保重!
您需要将中位数计算与外部查询相关联。
看起来像这样:
...
((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