你好,我是 mysql 的新手,我正在尝试创建一个简单的函数来计算给定列的标准偏差作为该函数的参数。我在创建 for 循环和递增 var 变量时遇到问题。任何帮助,将不胜感激。
CREATE FUNCTION `Stdev` (col varchar(10))
RETURNS decimal(8,5)
BEGIN
SELECT @col :=
SELECT @mean := AVG(col) FROM mytable ;
simple_loop: loop
BEGIN
SELECT @var := POWER(@mean - (SELECT col FROM mytable),2);
SELECT @stdev := POWER(@var,0.5)
RETURN @stdev;
END
最佳答案
SQL 已经有一个标准偏差函数,stddev_pop
.
但是如果你真的想自己写...
虽然您可以在 SQL 中编写循环,但这通常意味着您的效率很低。 SQL 是一种非常高效地迭代大型数据集的引擎。如果您自己执行循环,则您没有利用 SQL。
正在关注 the algorithm for standard deviation ,我们可以将此查询构建为一系列子选择。
取平均值。
select avg(num) as mean from foo;
计算与均值的差并平方。
select pow(num - mean, 2) as sqdiff from foo, (select avg(num) as mean from foo) as mean;
取差的均值并取平方根。
select pow(avg(sqdiff), 0.5) as stddev from ( select pow(num - mean, 2) as sqdiff from foo, (select avg(num) as mean from foo) as mean ) as sqdiff
关于mysql - 在mysql workbench中实现标准差函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50705577/