PostgreSQL
PostgreSQL
SELECT percentile_cont(0.5) WITHIN GROUP (ORDER BY amount) AS median,
percentile_cont(0.95) WITHIN GROUP (ORDER BY amount) AS p95,
percentile_disc(0.5) WITHIN GROUP (ORDER BY amount) AS median_disc
FROM orders;MySQL 近似思路
MySQL 近似思路
SELECT AVG(amount) AS approx_median
FROM (
SELECT amount,
ROW_NUMBER() OVER (ORDER BY amount) AS rn,
COUNT(*) OVER () AS n
FROM orders
) t
WHERE t.rn IN (FLOOR((t.n + 1) / 2), CEIL((t.n + 1) / 2));| percentile_cont | 按插值返回连续分位值 |
|---|---|
| percentile_disc | 返回实际存在于数据中的值 |
| MySQL | 无内置分位聚合,用窗口函数或应用层 |