mysql - 在mysql workbench中实现标准差函数

标签 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

最佳答案

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
    

关于mysql - 在mysql workbench中实现标准差函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50705577/

相关文章:

android - 在 TableView 中显示结果集

php - 需要获取表,以便每一行都有键的主 ID (ZEND)

java - 进程卡在 waitFor() 中

python - Peewee 具有多个编程过滤器参数的原始 SELECT sql

mysql - 服务器 2008r2 x64 和 ODBC 连接器

php - MySQL 查询当前周的 yearweek 星期四开始,星期三结束

mysql - 如何在查询浏览器中创建表期间创建日期格式

java - Glassfish 和 Mysql 不能很好地存储西里尔字母

mysql - 设置一个持久的全局 MySQL 参数

php - 如何将带有mysql的php应用程序部署到heroku?