【发布时间】:2022-12-08 21:50:28
【问题描述】:
我正在尝试在 MySql 5 中创建一个相关函数,它包含两列 (x, y) 并返回一个十进制值 (correlation_coefficient)。
这是我的函数定义
-- Calculate pearson correlation coefficient.
-- INPUT: X and Y should be columns of data (decimal)
-- RETURN: A value between -1 and 1 depending on the strength of the relationship between the 2 columns e.g. 0.43.
DELIMITER $$
CREATE FUNCTION PearsonCorrelation(
x Decimal(10,1),
y Decimal(10,1)
)
RETURNS Decimal(10,1)
DETERMINISTIC
BEGIN
DECLARE correlation_coefficient DECIMAL(3,2);
SET correlation_coefficient = (avg(x * y) - avg(x) * avg(y)) / (sqrt(avg(x * x) - avg(x) * avg(x)) * sqrt(avg(y * y) - avg(y) * avg(y)));
RETURN(correlation_coefficient);
END $$
DELIMITER ;
但是,当我执行函数调用时,出现错误“无效使用组函数”。这是一些测试数据,其中从数据集返回的相关系数应该是 0.86。
CREATE TABLE data_table
(
x Decimal(3,1) NOT NULL,
y Decimal(3,1) NOT NULL
)
INSERT INTO data_table
VALUES(11.2, 10.4),
(9.7, 4.6),
(4.5, 2.1)
我打算按如下方式调用此函数:
Select PearsonCorrelation(x,y) as corrcoef
FROM data_table
鉴于反馈,我的问题可能会被重新定义为,是否可以将表列作为参数传递给相关函数,如果可以,我如何调整函数来实现这一点?
【问题讨论】:
-
请通过提供样本数据和预期结果来澄清,因为功能没有意义。
-
添加了测试数据。
-
- 您不能将表数据传递给函数,并且函数是自包含的,对调用语句中的表一无所知。而且您还没有展示如何调用该函数
-
谢谢@P.Salmon。根据您的反馈,我已经更新了问题。
标签: mysql