Oracle analytic function-stddev,stddev_samp,stddev_pop

stddev

STDDEV返回expr的样本标准差(sample standard deviation),这个函数可以被用于聚合函数也可以被用于分析函数。当expr只有一行输入的时候STDDEV函数返回0,STDDEV_SAMP返回为null。
Oracle计算标准差的公式为VARIANCE聚合函数的方差的算术平方根。
当函数语法中指定了DISTINCT,那么在analytic_clause部分值可以使用query_partition_clause语句,ORDER BY 和开窗语句是不允许使用的。

stddev_pop

STDDEV_POP计算总体标准差(population standard deviation)并返回总体方差的算术平方根。这个函数可以被用于聚合和分析函数。
这个函数与VAR_POP函数的算术平方根相同,当VAR_POP返回为null的时候STDEDEV_POP也返回null。

stddev_samp

STDDEV_SAMP计算累计样本标准差(cumulative sample standard deviation),返回样本方差的算术平方根。这个函数可以是聚合功能也可以是分析功能。
STDDEV_SAMP函数与VAR_SAMP函数的算术平方根相同。当VAR_SAMP返回null的时候stddev_samp也返回null。

三个函数对比

聚合函数
计算employees表salary列的样本标准差、总体标准差和样本累积标准差。
SQL> select stddev(salary) "stddev",
  2         stddev_pop(salary) "stddev_pop",
  3         stddev_samp(salary) "stddev_samp"
  4    from employees;

    stddev stddev_pop stddev_samp
---------- ---------- -----------
3915.74258 3897.40176  3915.74258

分析函数
SQL> select department_id,
  2         last_name,
  3         salary,
  4         stddev(salary) over (partition by department_id order by hire_date) "stddev", --样本标准差
  5         stddev_pop(salary) over (partition by department_id order by hire_date) "stddev_pop",--总体标准差
  6         stddev_samp(salary) over (partition by department_id order by hire_date) "stddev_samp" --累积样本标准差
  7  from employees where department_id <= 40;

DEPARTMENT_ID LAST_NAME                                              SALARY     stddev stddev_pop stddev_samp
------------- -------------------------------------------------- ---------- ---------- ---------- -----------
           10 Whalen                                                   4400          0          0
           20 Hartstein                                               13000          0          0
           20 Fay                                                      6000 4949.74747       3500  4949.74747
           30 Raphaely                                                11000          0          0
           30 Khoo                                                     2600 5939.69696       4200  5939.69696
           30 Tobias                                                   2600 4849.74226 3959.79797  4849.74226
           30 Baida                                                    2900 4152.40894 3596.09163  4152.40894
           30 Himuro                                                   2600 3725.31878 3332.02641  3725.31878
           30 Colmenares                                               2500 3415.65026 3118.04782  3415.65026
           40 Mavris                                                   6500          0          0
此条目发表在analytic function, SQL分类目录。将固定链接加入收藏夹。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s