Перейти к основному содержимому
Версия: 2.0.x

percentile_disc

Возвращает процентильное значение на основе дискретного распределения входного столбца expr. Если точное процентильное значение не может быть найдено, эта функция возвращает большее значение из двух ближайших значений.

Эта функция поддерживается начиная с версии 2.5.

Синтаксис

PERCENTILE_DISC (expr, percentile)

Параметры

  • expr: столбец, для которого вы хотите рассчитать процентильное значение. Столбец может быть любого типа данных, который поддерживает сортировку.
  • percentile: процентиль искомого значения. Должно быть константой с плавающей точкой от 0 до 1. Например, если вы хотите найти медианное значение, установите этот параметр равным 0.5. Если вы хотите найти значение на 70-м процентиле, укажите 0.7.

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

Тип данных возвращаемого значения совпадает с expr.

Примечания по использованию

Значения NULL игнорируются при расчёте.

Примеры

Создайте таблицу exam и вставьте данные в эту таблицу.

CREATE TABLE exam (
subject STRING,
score INT
)
DISTRIBUTED BY HASH(`subject`);

INSERT INTO exam VALUES
('chemistry',80),
('chemistry',100),
('chemistry',null),
('math',60),
('math',70),
('math',85),
('physics',75),
('physics',80),
('physics',85),
('physics',99);
select * from exam order by subject;
+-----------+-------+
| subject | score |
+-----------+-------+
| chemistry | 80 |
| chemistry | 100 |
| chemistry | NULL |
| math | 60 |
| math | 70 |
| math | 85 |
| physics | 75 |
| physics | 80 |
| physics | 85 |
| physics | 99 |
+-----------+-------+

Рассчитайте медиану по каждому предмету.

select subject, percentile_disc(score, 0.5)
from exam group by subject;

Вывод

+-----------+-----------------------------+
| subject | percentile_disc(score, 0.5) |
+-----------+-----------------------------+
| chemistry | 100 |
| math | 70 |
| physics | 85 |
+-----------+-----------------------------+