我有一张桌子的员工,
CREATE TABLE employees (
employeeid NUMERIC(9) NOT NULL,
firstname VARCHAR(10),
lastname VARCHAR(20),
deptcode CHAR(5),
salary NUMERIC(9, 2),
PRIMARY KEY(employeeid)
);我想计算工资的标准差。
这是我使用的代码:
select avg(salary) as mean
,sqrt(sum((salary-avg(salary))*(salary-avg(salary)))/count(employeeid)) as SD
from employees
group by employeeid;我得到了这个错误:
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(薪水)
我该如何解决这个问题呢?
发布于 2014-04-10 14:25:36
发布于 2014-04-10 14:25:46
我只需要使用stddev函数
SELECT avg(salary) as mean,
stddev(salary) as sd
FROM employees这对group by employeeid来说没有任何意义,因为它可能是唯一的。谈论员工的平均工资是没有意义的,你想要所有员工(或所有部门或其他可汇总的单位)的平均工资。
发布于 2014-04-10 14:26:15
无法计算salary-avg(salary);avg(salary)在查询执行期间不可用,只有在检索到所有记录之后才可用。
我建议在子查询中添加AVG计算,并将其连接到主查询
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;https://stackoverflow.com/questions/22980085
复制相似问题