您好我是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
答案 0 :(得分:0)
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