回答

收藏

甲骨文向所有员工展示其部门薪水高于平均水平的员工

技术问答 技术问答 138 人阅读 | 0 人回复 | 2023-09-13

我正在写一个查询,以查找收入高于其部门平均工资的员工。我需要显示员工ID,薪水,部门ID和该部门的平均工资。
) M$ E, R2 k1 t4 Q6 \我有一个几乎可以正常使用的查询,但它一直显示“ ORA-00904:“0 _+ j2 u8 J0 S. ~7 J3 r
AVG_SAL”:无效标识符”错误。我正确地做到了吗?为什么会出现此无效的标识符错误?
9 B. y8 g$ e% i9 B2 K1 s3 ?4 SSELECT employee_id, salary, department_id,
8 R7 c  T' s- x+ |  W7 k* }! ^  (SELECT ROUND(AVG(salary),2)
  u, A" N2 X7 @9 `% Z3 L$ k  FROM employees e_inner
4 d) r" F1 |: N! y. n  WHERE e_inner.department_id = e.department_id) AS avg_sal
' M" M! D- V. F. W. wFROM employees e3 Q" G# u- e/ T: X& U4 X! s
WHERE salary > avg_sal
; _2 P# M+ ]9 z, {( t& yORDER BY avg_sal DESC4 Y$ a: y" |: T- A/ U- E
                2 u4 l2 `/ ~5 x: |9 D; o  n$ J& K. h
解决方案:+ L  b5 Z! y0 d. {! v
                / Z+ Q  G* m# \- J5 k

( l, {7 R) x; C9 ?8 B' \0 _% d8 {
% m% p7 [" G- [) {                我不相信您可以在WHERE子句中引用列别名(在这种情况下为avg_sal)。( \' [; n* E% J5 A7 I8 C
您需要重复该内部查询,即:
4 [* R9 ?  i2 `* G7 p* }: [SELECT employee_id, salary, department_id,. q; I6 q* n6 g2 ]6 V5 [+ \
  (SELECT ROUND(AVG(salary),2)* O. Z3 X* C7 Z6 E9 l
  FROM employees e_inner7 W( {# u) r7 Z& \" a
  WHERE e_inner.department_id = e.department_id) AS avg_sal" o& I+ V  H" \+ n7 S' U
FROM employees e3 o' ^) s/ @! ?. p$ e% p! v' H, N, h: @
WHERE salary >
* E3 |; r& K& ?  M$ Z" _% z (SELECT ROUND(AVG(salary),2)
$ r8 J5 g  F3 c/ P  FROM employees e_inner
+ C& z$ X/ L% g( b0 [% l  q' E  WHERE e_inner.department_id = e.department_id)
8 c! V& [6 \! k& ]2 l1 |$ }4 \ORDER BY avg_sal DESC
9 u8 ?8 a) f0 {4 V; @# c, y这两个内部查询不是很好,但这是更正错误的最直接的方法。
) z0 d# @8 `* a- p5 _* }更新: 尚未对此进行测试,但是请尝试以下操作:/ Q; K5 T" U  r& z0 b
SELECT e.employee_id, e.salary, e.department_id, b.avg_sal6 i) l/ s% b0 R* T. u
FROM employees e
# b4 K/ }7 y/ a. ?5 m1 NINNER JOIN
  c3 }, s! p! R, U* ~# V: U! T+ M(SELECT department_id, ROUND(AVG(salary),2) AS avg_sal
/ L# E" m3 P3 W- ~# a FROM employees
" i0 a$ I, o7 m$ f" l4 ^ GROUP BY department_id) e_avg ON e.department_id = e_avg.department_id AND e.salary > e_avg.avg_sal
6 b$ w% f; o, g: ~6 N6 T1 WORDER BY e_avg.avg_sal DESC
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则