Перейти к содержимому
Последнее обновление

PERCENTILE_ARRAY

Описание​

Функция PERCENTILE_ARRAY вычисляет массивы точных значений процентилей, позволяя вычислять значения нескольких процентилей за один вызов. Эта функция подходит прежде всего для небольших наборов данных.

Основные возможности:

  1. Точные вычисления: возвращает точные, а не приближённые значения процентилей
  2. Пакетная обработка: позволяет вычислять несколько процентилей за одну операцию
  3. Область применения: лучше всего подходит для обработки небольших наборов данных

Синтаксис​

PERCENTILE_ARRAY(<col>, <array_p>)

Параметры​

ПараметрОписание
<col>Столбец, для которого вычисляются точные значения процентилей. Поддерживаемые типы: Double, Float, LargeInt, BigInt, Int, SmallInt, TinyInt.
<array_p>Массив процентилей; каждый элемент должен быть константой типа Array со значениями в диапазоне [0.0, 1.0], например [0.5, 0.95, 0.99].

Возвращаемое значение​

Возвращает массив значений типа DOUBLE, содержащий вычисленные значения процентилей. Если в группе нет допустимых данных, возвращает пустой массив.

Примеры​

-- setup
CREATE TABLE sales_data (
id INT,
amount DECIMAL(10, 2)
) DUPLICATE KEY(`id`)
DISTRIBUTED BY HASH(`id`) BUCKETS AUTO
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);
INSERT INTO sales_data VALUES
(1, 10.5),
(2, 15.2),
(3, 20.1),
(4, 25.8),
(5, 30.3),
(6, 35.7),
(7, 40.2),
(8, 45.9),
(9, 50.4),
(10, 100.6);
SELECT percentile_array(amount, [0.25, 0.5, 0.75, 0.9]) as percentiles
FROM sales_data;

Вычисление нескольких процентилей.

+-----------------------------------------------------+
| percentiles |
+-----------------------------------------------------+
| [21.525000000000002, 33, 44.475, 55.41999999999998] |
+-----------------------------------------------------+
SELECT percentile_array(if(amount>90, amount, NULL), [0.5, 0.99]) FROM sales_data;

В вычислениях участвуют только данные, отличные от NULL.

+------------------------------------------------------------+
| percentile_array(if(amount>90, amount, NULL), [0.5, 0.99]) |
+------------------------------------------------------------+
| [100.6, 100.6] |
+------------------------------------------------------------+
SELECT percentile_array(NULL, [0.5, 0.99]) FROM sales_data;

Возвращает пустой массив, если все входные данные равны NULL.

+-------------------------------------+
| percentile_array(NULL, [0.5, 0.99]) |
+-------------------------------------+
| [] |
+-------------------------------------+