Альтернатива для PERCENTILE_CONT в MySQL/MariaDB
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 () (обозначает непрерывный процентиль) - это агрегатная функция упорядоченного множества, которую также можно использовать как оконную функцию. Возвращает значение, соответствующее данной дроби в порядке сортировки. При необходимости он будет интерполировать между смежными входными элементами.
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-й процентиль для одного набора значений.
Это лучше всего сделать из кода приложения, но его можно встроить в хранимую процедуру.
- Подсчитайте общее количество строк:
SELECT COUNT(*) FROM tbl
, - Построить и выполнить
SELECT
сLIMIT n,1
гдеn
вычисляется как процентиль, умноженный на количество, а затем заполняется в запросе.
Если вам нужно интерполировать между двумя значениями, это становится грязнее. Вам это тоже нужно?