Oracle,row_number,正在删除行

Oracle, row_number, deleting rows

我有个小问题。这是一个代码:

  select * from
(select department_id, manager_id,last_name, salary, row_number() over
(partition by department_id,manager_id order by salary asc) p_number
from employees )
where p_number <=3;

此查询为部门中的每个经理显示每个部门中最低的 3 个薪水 例如:30 号部门有 2 名经理(100 和 114),100 号经理下面有 1 名员工,114 号经理 - 3 名员工。

部分结果:

20  100 Hartstein   13000   1
20  201 Fay         6000    1
30  100 Raphaely    11000   1
30  114 Colmenares  2500    1
30  114 Himuro      2600    2
30  114 Tobias      2800    3

现在,我想删除经理下面只有 1 名员工的所有行。在这个例子中应该有,Harstein,Fay,Raphaely。科尔梅纳雷斯也有 1 号,但经理 114 下的员工更多。 有任何想法吗? PS 有 Count out,因为没有 group by,修改

where p_number <=3;

进入

 where p_number <=3 and p_number >1;

也出局了,因为它会删除我所有的 1 号员工,我想 'safe' 少一些,因为他们有更多 'colleagues' :) 谢谢!

这将给出结果,只需要一次 table 扫描:

SELECT *
FROM   (
  SELECT department_id,
         manager_id,
         last_name, 
         salary,
         ROW_NUMBER()
           OVER ( PARTITION BY department_id, manager_id
                  ORDER BY salary ASC ) AS p_number,
         COUNT(*)
           OVER ( PARTITION BY department_id, manager_id ) AS p_count
  FROM   employees
  ORDER BY department_id, manager_id, salary
)
WHERE p_count >= 2
AND   p_number <= 3;

输出:

DEPARTMENT_ID MANAGER_ID LAST_NAME      SALARY   P_NUMBER    P_COUNT
------------- ---------- ---------- ---------- ---------- ----------
           30        114 Colmenares       2500          1          3 
           30        114 Himuro           2600          2          3 
           30        114 Tobias           2800          3          3