Альтернатива для PERCENTILE_CONT в MySQL/MariaDB

введите описание изображения здесь

Я хочу рассчитать процентиль_конт по этой таблице. В Oracle запрос будет

SELECT PERCENTILE_CONT(0.05) FROM sometable;

Что будет альтернативой в MariaDB/MySQL?

3 ответа

Хотя MariaDB 10.3.3 поддерживает эти функции в форме оконных функций ( см. Ответ Лукаша Шозды), вы можете эмулировать их, используя оконные функции в MySQL 8:

SELECT DISTINCT first_value(matrix_value) OVER (
  ORDER BY CASE WHEN p <= 0.05 THEN p END DESC /* NULLS LAST */
) x,
FROM (
  SELECT
    matrix_value,
    percent_rank() OVER (ORDER BY matrix_value) p,
  FROM some_table
) t;

Я написал об этом более подробно здесь.

MariaDB 10.3.3 введены PERCENTILE_CONT, PERCENTILE_DISC, а также MEDIAN оконные функции.

PERCENTILE_CONT

PERCENTILE_CONT () (обозначает непрерывный процентиль) - это агрегатная функция упорядоченного множества, которую также можно использовать как оконную функцию. Возвращает значение, соответствующее данной дроби в порядке сортировки. При необходимости он будет интерполировать между смежными входными элементами.

SELECT name, PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY star_rating) 
        OVER (PARTITION BY name) AS pc 
FROM book_rating;

Для этого нет ни встроенной функции ни в MariaDB, ни в MySQL, поэтому вы должны решить эту проблему на уровне SQL (или путем добавления пользовательской функции, написанной на C ...)

Это может помочь с решением SQL:

http://rpbouman.blogspot.de/2008/07/calculating-nth-percentile-in-mysql.html

MariaDB 10.2 имеет функции управления окнами.

Для MySQL / более старой MariaDB, и при условии, что вы просто хотите использовать N-й процентиль для одного набора значений.

Это лучше всего сделать из кода приложения, но его можно встроить в хранимую процедуру.

  1. Подсчитайте общее количество строк: SELECT COUNT(*) FROM tbl,
  2. Построить и выполнить SELECT с LIMIT n,1 где n вычисляется как процентиль, умноженный на количество, а затем заполняется в запросе.

Если вам нужно интерполировать между двумя значениями, это становится грязнее. Вам это тоже нужно?

Другие вопросы по тегам