HR.EMPLOYEES表嵌套SQL查询报错:如何筛选工龄低于平均值的员工?
问题修正:查询工龄低于平均值的员工名单
你的SQL语句存在两个明显错误,导致执行报错:
- 表名拼写错误:把
hr.employees误写成了hr.empolyees - 子查询的聚合函数括号不匹配:
avg(MONTHS_BETWEEN(sysdate, hire_date)缺少闭合的右括号,同时整个子查询的括号也需要正确闭合
修正后的基础版本SQL如下:
SELECT first_name, last_name FROM hr.employees WHERE MONTHS_BETWEEN(SYSDATE, hire_date) < ( SELECT AVG(MONTHS_BETWEEN(SYSDATE, hire_date)) FROM hr.employees );
如果想优化性能,避免重复计算工龄平均值,可以用CTE(公共表表达式)先计算一次平均工龄,再关联查询:
WITH avg_employee_tenure AS ( SELECT AVG(MONTHS_BETWEEN(SYSDATE, hire_date)) AS average_months FROM hr.employees ) SELECT e.first_name, e.last_name FROM hr.employees e, avg_employee_tenure t WHERE MONTHS_BETWEEN(SYSDATE, e.hire_date) < t.average_months;
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

