简体   繁体   English

MySQL function 计算百分位数

[英]MySQL function to calculate percentile

I'm trying to script a mysql function to calculate my percentiles.我正在尝试编写 mysql function 脚本来计算我的百分位数。 My code:我的代码:

CREATE DEFINER=`root`@`localhost` FUNCTION `percentile`(tbl_name VARCHAR(255),col_name VARCHAR(255)) RETURNS double(10,2)
    READS SQL DATA
    DETERMINISTIC
BEGIN

RETURN CONCAT('SELECT `',col_name,'` FROM 
(SELECT t.*,  @row_num :=@row_num + 1 AS row_num FROM `',tbl_name,'` t, 
    (SELECT @row_num:=0) counter ORDER BY `',col_name,'`) 
temp WHERE temp.row_num = ROUND (0.75* @row_num);');
END

When I try to call it I get the error:当我尝试调用它时,我得到了错误:

Error Code: 1265. Data truncated for column schema.percentile('table', 'column')

I can't figure out the source of the error.我无法弄清楚错误的来源。 Any solutions?有什么解决办法吗?

You can write a PROCEDURE:你可以写一个PROCEDURE:

    CREATE DEFINER=`root`@`localhost` 
    PROCEDURE `sp_percentile`(tbl_name VARCHAR(2555),col_name VARCHAR(5000))
    BEGIN SET @sql = CONCAT('SELECT `',col_name,'` FROM (SELECT t.*,  @row_num :=@row_num + 1 AS row_num FROM `',tbl_name,'` t, (SELECT @row_num:=0) counter ORDER BY `',col_name,'`)  temp WHERE temp.row_num = ROUND (0.75* @row_num);'); 
    PREPARE stmt FROM @sql; 
    EXECUTE stmt; 
    DEALLOCATE PREPARE stmt; 
    END 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM