Агрегатністандарт SQL

PERCENTILE_CONT

Знаходить медіану чи інший перцентиль — значення, нижче якого лежить задана частка даних.

Синтаксис

PERCENTILE_CONT(<частка>) WITHIN GROUP (ORDER BY <вираз>)

PERCENTILE_CONT(0.5) — медіана: половина значень менша, половина більша. На відміну від середнього, її не зсуває одне дуже велике значення. Функція може повернути число між двома наявними; якщо потрібне саме одне з наявних значень — бери PERCENTILE_DISC.

Дані для прикладів

employees

namedepartmentsalarybonusphone
Emmabackend1200300+44 7700 900123
Liambackend1000NULLNULL
Oliviafrontend1350150+44 7700 900456
Noahfrontend950NULL+44 7700 900789
Sophiadesign1200200NULL

orders

idcreated_atamount
12026-07-03 10:15:00120.50
22026-07-28 18:40:0080.25
32026-08-09 09:05:00199.99
42026-08-21 14:30:0045.00
52026-09-02 11:00:0064.75

Ці таблиці вже створено в пісочниці — приклади нижче працюють із ними. Хочеш повторити у своїй базі — скопіюй SQL.

Медіана зарплати
SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY salary) AS median_salary
FROM employees;
median_salary
1200
Медіана проти середнього
SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY amount) AS median,
ROUND(AVG(amount), 2) AS average
FROM orders;
medianaverage
80.25102.10

Замовлення на 199.99 тягне середнє вгору, а медіана лишається «типовою» сумою.

Кілька перцентилів одразу
SELECT PERCENTILE_CONT(ARRAY[0.25, 0.5, 0.75]) WITHIN GROUP (ORDER BY salary) AS quartiles
FROM employees;
quartiles
[1000,1200,1200]

Масив часток дає масив відповідей: для чверті, половини й трьох чвертей.

Зверни увагу

Синтаксис незвичний: частку пишуть у дужках функції, а стовпець — у WITHIN GROUP (ORDER BY …). PERCENTILE_CONT(salary, 0.5) дасть помилку WITHIN GROUP is required for ordered-set aggregate.

Частка — від 0 до 1, а не відсотки: 90-й перцентиль — це 0.9, а 90 дасть percentile value 90 is not between 0 and 1.

PERCENTILE_CONT рахує лише числа й інтервали — для дат і тексту бери PERCENTILE_DISC. І віконною функцією з OVER вона не буває: OVER is not supported for ordered-set aggregate.

Схожі функції

Детально в курсі