PERCENTILE_CONT
Возвращает процентиль — значение, ниже которого лежит заданная доля значений группы; между соседними значениями вычисляет промежуточное.
PostgreSQL 17.9
PERCENTILE_CONT(fraction) WITHIN GROUP (ORDER BY expression)- fraction
- Доля от 0 до 1, например 0.5 для медианы; можно передать массив долейdouble precision
- expression
- Числовое выражение или интервал, по которому упорядочиваются значенияdouble precision | interval
Возвращаемое значение
Число (double precision) или интервал; массив, если fraction — массив; NULL для пустого набора
Примеры
Медиана и среднее цен
PostgreSQL 17.9
SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (
ORDER BY unit_price
) AS median,
AVG(unit_price) AS average
FROM Payments;Медиана цены у каждого члена семьи
PostgreSQL 17.9
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.9
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, медиана почти не зависит от редких очень больших значений.