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

percentile_disc_lc

Возвращает процентильное значение на основе дискретного распределения входного столбца expr. Поведение аналогично percentile_disc. Однако алгоритм реализации отличается. percentile_disc требует получения всех входных данных, и память, потребляемая при сортировке слиянием для получения процентильных значений, равна памяти всех входных данных. С другой стороны, percentile_disc_lc строит хеш-таблицу key->count, поэтому при низкой кардинальности входных данных не происходит заметного увеличения памяти, даже если размер входных данных велик.

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

Синтаксис

PERCENTILE_DISC_LC (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_lc (score, 0.5)
from exam group by subject;

Вывод

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