DELIMITER // CREATE PROCEDURE calculate_regression(IN input_string VARCHAR(100)) BEGIN DECLARE max_val INT DEFAULT 0; DECLARE max_index INT DEFAULT 0; DECLARE i INT DEFAULT 0; DECLARE x_sum INT DEFAULT 0; DECLARE y_sum INT DEFAULT 0; DECLARE x_mean FLOAT DEFAULT 0; DECLARE y_mean FLOAT DEFAULT 0; DECLARE numerator FLOAT DEFAULT 0; DECLARE denominator FLOAT DEFAULT 0;

-- 将字符串转化为数组
DROP TEMPORARY TABLE IF EXISTS temp_array;
CREATE TEMPORARY TABLE temp_array (
    id INT AUTO_INCREMENT PRIMARY KEY,
    val INT
);
SET @sql = CONCAT("INSERT INTO temp_array (val) VALUES (", REPLACE(input_string, ",", "),( "), ")");
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

-- 计算最大值及其所在位置
SELECT MAX(val), id INTO max_val, max_index FROM temp_array;
SELECT SUM(val) INTO x_sum FROM temp_array WHERE id <= max_index;
SELECT COUNT(*) INTO i FROM temp_array WHERE id <= max_index;
SET x_mean = x_sum / i;

-- 计算一级数值的和
SELECT SUM(val) INTO y_sum FROM temp_array WHERE id <= max_index - 1;

-- 计算 y 的平均值
SET y_mean = y_sum / (max_index - 1);

-- 计算斜率
SELECT SUM((id - x_mean) * (val - y_mean)) INTO numerator FROM temp_array WHERE id <= max_index;
SELECT SUM(POW(id - x_mean, 2)) INTO denominator FROM temp_array WHERE id <= max_index;
SELECT numerator / denominator INTO slope;

-- 输出结果
SELECT CONCAT("max_val: ", max_val) AS result;
SELECT CONCAT("一级数值: ", y_sum) AS result;
SELECT CONCAT("斜率: ", slope) AS result;

-- 删除临时表
DROP TEMPORARY TABLE IF EXISTS temp_array;

END // DELIMITER ;

-- 调用存储过程 CALL calculate_regression("11,12,19,14,15,16,12");

用mysql 写一个存储过程计算一个7个数的数组字符串11121914151612计算出最大值并且从最大值所在位置往前的数值为一级数值计算回归线的斜率

原文地址: https://www.cveoy.top/t/topic/bWeG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录