我需要使用分析函数创建一个报表,该报表以百分比形式显示每个雇员在其工作的部门中所获得的薪金部分的信息。
SELECT EMPLOYEES.FIRST_NAME, EMPLOYEES.LAST_NAME, EMPLOYEES.DEPARTMENT_ID,
DEPARTMENTS.DEPARTMENT_NAME, EMPLOYEES.SALARY,
(SALARY/SUM(SALARY)) * 100 over (partition by DEPARTMENT_ID) AS "PercentWithinDepartment"
FROM HR.EMPLOYEES
FULL JOIN HR.DEPARTMENTS ON EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID
我收到“ORA-00923 FROM关键字未在预期位置找到”错误,但我认为这不是我在此任务中的唯一错误。
我无法提供数据库的代码片段,但可以针对HR示例模式运行。
我的请求是帮助我找出错误来正确地完成这项任务。
3条答案
按热度按时间flmtquvp1#
直接的问题是
over
子句的位置不对:应该是
但是,对
DEPARTMENT_ID
的引用是不明确的,因为该列在两个表中,所以它应该是:您可能需要考虑使用表别名以使代码更短。
您可能还希望将百分比四舍五入(或截断/下限)到小数点后一位或两位。
我不确定您是否真的想要完整的外部链接,因为完整的外部链接会包含所有没有员工的部门(例如,“Recruiting”)。左外部链接看起来更适合,所以未链接至任何部门的“金伯利Grant”仍会包含在内。
我必须计算员工在所有组织中获得的工资的百分比,我很困惑为什么我在这里得到“不是单组组函数”错误
因为您添加为注解的版本具有:
这是函数的聚合形式,而不是分析形式。由于您不希望在此处进行聚合,因此仍然需要一个
over
子句来使其成为分析形式,但该子句可以为空:当然,您也可以同时执行这两项操作:
您可能还需要添加
order by
子句...n8ghc7c12#
我没有HR模式(但我有Scott),所以--我使用SQL*Plus的格式化功能使它看起来更漂亮。
结果:
(Sum由于四舍五入的原因,并不完全是100%。)
oknwwptz3#
我可能弄错了,但在我看来,您所需要的只是使用ratio_to_report分析函数。请尝试使用此函数