虽然MariaDB 10.3.3已经支持这些函数,以窗口函数的形式(请参见Lukasz Szozda的答案),但是在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() (standing for continuous percentile) is an ordered set aggregate function which can also be used as a window function. It returns a value which corresponds to the given fraction in the sort order. If required, it will interpolate between adjacent input items.
SELECT name, PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY star_rating) OVER (PARTITION BY name) AS pc FROM book_rating;
http://rpbouman.blogspot.de/2008/07/calculating-nth-percentile-in-mysql.html
MariaDB 10.2具有窗口函数。
对于MySQL / 旧版MariaDB,假设您只想要单个值集的第N个百分位。
最好从应用程序代码中完成此操作,但也可以构建为存储例程。
SELECT COUNT(*) FROM tbl
。LIMIT n,1
的SELECT
,其中n
被计算为百分位乘以计数,然后填入查询中。如果您需要在两个值之间插值,则会变得更加混乱。您也需要这样吗?
PERCENTILE_CONT
。 - Lukasz Szozda
percentile_cont
或根据您的示例表格展示您想要从该SELECT
中获取的数据。 - Rick JamesWITHIN GROUP
功能吗? - Rick James