workbentch中标准差函数的实现

lf3rwulv  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(323)

你好,我是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
k4ymrczo

k4ymrczo1#

sql已经有了标准差函数, stddev_pop .
但是如果你真的想自己写的话。。。
虽然您可以用sql编写循环,但这通常意味着您的工作效率低下。sql是一个非常有效地迭代大型数据集的引擎。如果你自己做循环,你就没有利用sql。
按照标准差算法,我们可以将这个查询建立为一系列子选择。
以平均值为准。

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

相关问题