在mysql workbentch中实现标准差函数

时间:2018-06-05 17:13:55

标签: mysql

您好我是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

1 个答案:

答案 0 :(得分:0)

SQL已经有一个标准偏差函数stddev_pop

但如果你真的想自己写一下......

虽然可以在SQL中编写循环,但这通常意味着您的效率低下。 SQL是一种非常有效地迭代大型数据集的引擎。如果你自己进行循环,那么你就没有利用SQL。

the algorithm for standard deviation之后,我们可以将此查询构建为一系列子选择。

  1. 取平均值。

    select avg(num) as mean
    from foo;
    
  2. 计算与平均值的差异并将其平方。

    select pow(num - mean, 2) as sqdiff
    from foo,
    (select avg(num) as mean from foo) as mean;
    
  3. 得到差异的平均值并取平方根。

    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