【发布时间】:2011-12-20 10:21:19
【问题描述】:
这是一个众所周知的问题。考虑以下
EmployeeID EmployeeName Department Salary
----------- --------------- --------------- ---------
1 T Cook Finance 40000.00
2 D Michael Finance 25000.00
3 A Smith Finance 25000.00
4 D Adams Finance 15000.00
5 M Williams IT 80000.00
6 D Jones IT 40000.00
7 J Miller IT 50000.00
8 L Lewis IT 50000.00
9 A Anderson Back-Office 25000.00
10 S Martin Back-Office 15000.00
11 J Garcia Back-Office 15000.00
12 T Clerk Back-Office 10000.00
我们需要找出第二高的薪水
With Cte As
(
Select
level
,Department
,Max(Salary)
From plc2_employees
Where level = 2
Connect By Prior (Salary) > Salary)
Group By level,Department
)
Select
Employeeid
,EmployeeName
,Department
,Salary
From plc2_employees e1
Inner Join Cte e2 On e1.Department = e2.Department
Order By
e1.Department
, e1.Salary desc
,e1.EmployeeID
不知何故无法正常工作...我没有得到正确的结果。谁能帮帮我。
【问题讨论】:
-
您不是对拉里·埃里森感兴趣,而是对甲骨文的其他人感兴趣? (抱歉,我觉得这个主题听起来像......)
-
是的,这个问题类似于那个问题和其他 SO 问题。我已经看到了。。但我正在尝试使用 Connect by 方法来解决它。原因是我不熟悉它并试图在这种情况下实现它...
-
你不能使用递归查询来解决这个问题(好吧,你也许可以,但它不是适合这项工作的工具)。您正在运行的具体问题是子句
Connect By Prior (Salary) > Salary导致每个薪水都加入到它下面的每个薪水。 -
Allan,我正在尝试增强这里提出的第一种方法 (techforum4u.com/entry.php/…).. 请帮助
-
@user1025901:该链接中建议的方法经过深思熟虑。假设您有 1000 名员工:使用此方法您将创建一个包含 499,500 条记录的临时结果集(如果没有相等的记录,不等式连接将创建
n*(n-1)/2记录),以便找到您要查找的一条记录。这是非常低效的,特别是当有一个已知的解决方案使用更适合该任务的功能(分析查询)时。
标签: sql oracle top-n hierarchical-query