PERCENTILE_CONT
Возвращает процентиль — значение, ниже которого лежит заданная доля значений группы; между соседними значениями вычисляет промежуточное.
PostgreSQL 17.5
PERCENTILE_CONT(fraction) WITHIN GROUP (ORDER BY expression)Параметры
- fractiondouble precision
- Доля от 0 до 1, например 0.5 для медианы; можно передать массив долей
- expressiondouble precision | interval
- Числовое выражение или интервал, по которому упорядочиваются значения
Возвращаемое значение
Число (double precision) или интервал; массив, если fraction — массив; NULL для пустого набора
Примеры
Медиана и среднее цен
PostgreSQL 17.5
SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (
ORDER BY unit_price
) AS median,
AVG(unit_price) AS average
FROM Payments;Медиана цены у каждого члена семьи
PostgreSQL 17.5
SELECT family_member,
PERCENTILE_CONT(0.5) WITHIN GROUP (
ORDER BY unit_price
) AS median_price
FROM Payments
GROUP BY family_member
ORDER BY family_member;Квартили одним вызовом
PostgreSQL 17.5
SELECT PERCENTILE_CONT(ARRAY [0.25, 0.5, 0.75]) WITHIN GROUP (
ORDER BY unit_price
) AS quartiles
FROM Payments;Подробности
У функции особая запись: выражение указывается не в скобках, а в WITHIN GROUP (ORDER BY ...). Значения NULL не учитываются.
Если нужная позиция попадает между двумя значениями, результат вычисляется между ними: для 1, 2, 3 и 10 медиана — 2.5. Чтобы получить одно из существующих значений, используйте PERCENTILE_DISC. В отличие от AVG, медиана почти не зависит от редких очень больших значений.