SELECT
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY amount) AS median_check
FROM orders;
Результат:
median_check ------------ 1150.00
SELECT
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY amount) AS p50,
PERCENTILE_CONT(0.9) WITHIN GROUP (ORDER BY amount) AS p90,
PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY amount) AS p95
FROM orders;
Результат:
p50 | p90 | p95 --------+---------+--------- 1150.00 | 4200.00 | 6100.00
SELECT
country,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY amount) AS median_check
FROM orders
GROUP BY country
ORDER BY median_check DESC;
Результат:
country | median_check --------+------------- DE | 1420.00 RU | 1150.00 IN | 780.00Порешать SQL-задачи в тренажёре →
Спрашивают, когда среднее вводит в заблуждение из-за выбросов и нужна медиана или p90/p95 по времени ответа. Идёт в паре с PERCENTILE_DISC и GROUP BY; полезно знать, как посчитать медиану без неё через оконные функции.
PERCENTILE_CONT интерполирует между соседними значениями и может вернуть число, которого нет в данных (медиана 10 и 20 → 15). PERCENTILE_DISC возвращает ближайшее реально существующее значение из набора. Для медианы непрерывных величин обычно берут CONT.
Нет. В PostgreSQL она есть через WITHIN GROUP, а в MySQL и SQLite такой функции нет. Медиану там считают оконными функциями — например, через ROW_NUMBER()/COUNT() или NTILE.
Медиана — это 50-й перцентиль: PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY amount). Для p90 подставьте 0.9. Обратите внимание на конструкцию WITHIN GROUP — обычные скобки с аргументом здесь не работают.
ROW_NUMBER · RANK · DENSE_RANK · LAG · LEAD · NTILE
Открыть SQL-тренажёр (565 задач) →