首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Oracle SQL Developer中计算标准差?

如何在Oracle SQL Developer中计算标准差?
EN

Stack Overflow用户
提问于 2014-04-10 14:21:21
回答 4查看 18.3K关注 0票数 1

我有一张桌子的员工,

代码语言:javascript
复制
CREATE TABLE employees (
employeeid NUMERIC(9) NOT NULL,
firstname VARCHAR(10),
lastname VARCHAR(20),
deptcode CHAR(5),
salary NUMERIC(9, 2),
  PRIMARY KEY(employeeid)
);

我想计算工资的标准差。

这是我使用的代码:

代码语言:javascript
复制
select avg(salary) as mean
      ,sqrt(sum((salary-avg(salary))*(salary-avg(salary)))/count(employeeid)) as SD 
from employees
group by employeeid;

我得到了这个错误:

代码语言:javascript
复制
ORA-00979: not a GROUP BY expression
00979. 00000 -  "not a GROUP BY expression"
*Cause:    
*Action:
Error at Line: 260 Column: 12

第260行第12列为avg(薪水)

我该如何解决这个问题呢?

EN

回答 4

Stack Overflow用户

发布于 2014-04-10 14:25:36

Oracle有一个计算标准差的内置函数:STDDEV

其用法与您对任何聚合函数的预期相同。

代码语言:javascript
复制
select stddev(salary) 
from employees;
票数 8
EN

Stack Overflow用户

发布于 2014-04-10 14:25:46

我只需要使用stddev函数

代码语言:javascript
复制
SELECT avg(salary) as mean, 
       stddev(salary) as sd
  FROM employees

这对group by employeeid来说没有任何意义,因为它可能是唯一的。谈论员工的平均工资是没有意义的,你想要所有员工(或所有部门或其他可汇总的单位)的平均工资。

票数 6
EN

Stack Overflow用户

发布于 2014-04-10 14:26:15

无法计算salary-avg(salary)avg(salary)在查询执行期间不可用,只有在检索到所有记录之后才可用。

我建议在子查询中添加AVG计算,并将其连接到主查询

代码语言:javascript
复制
select avg(salary) as mean, 
      sqrt(sum((salary-avg_res.avg)*(salary-avg_res.avg))/count(employeeid)) as SD 
from employees JOIN
     (select employeeid,avg(salary) as avg
      from employees 
      group by employeeid) avg_res ON employees.employeeid=avg_res.employeeid
group by employeeid;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22980085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档