SQL 無內建中位數函數,可透過自連接排序排名法計算。本文以 Total_Sales 表為例,示範標準寫法與關鍵邏輯。

SELECT * FROM (
SELECT a1.Name, a1.Sales, COUNT(a2.Sales) AS Sales_Rank
FROM Total_Sales a1, Total_Sales a2
WHERE a1.Sales < a2.Sales
OR (a1.Sales = a2.Sales AND a1.Name = a2.Name)
GROUP BY a1.Name, a1.Sales
ORDER BY a1.Sales DESC, a1.Name DESC
) AS ranked
WHERE Sales_Rank = (SELECT (COUNT(*) + 1) / 2 FROM Total_Sales);
a1.Sales = a2.Sales AND a1.Name = a2.Name 確保同分同名僅計一次(COUNT(*) + 1) / 2(整數除法)

-- 使用 PERCENTILE_CONT (需排序)
SELECT DISTINCT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY Sales) OVER () AS Median
FROM Total_Sales;
-- 或 PERCENTILE_DISC 取實際資料值
SELECT PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY Sales) OVER () FROM Total_Sales;
舊版相容用排序排名法,新版優先用窗函數,語意更清晰、效能更佳。