我想在一个表中找到每个部门的两个最高薪水,该表有部门编号、薪水和其他各种列。我得到了这个答案;它肯定有效,但我无法理解其中的逻辑。
select *
from emp a where 2 > (select count( distinct(sal))
from emp
where sal > a.sal and a.deptno=deptno)
order by deptno;
最佳答案
对于employee 中的每一行,WHERE 子句中的查询计算同一部门有多少行有更高的薪水。然后 WHERE 子句本身将结果限制为仅在同一部门中具有 1 或 0 行( 2 >
)且薪水更高的那些薪水 - 即最高的两个薪水。
所以有了这个数据:
EmployeeId Sal DeptNo No. of rows in the same department with higher salary
1 1 1 3 (employees 2, 3 and 4)
2 2 1 2 (employees 3 and 4)
3 3 1 1 (employee 4)
4 4 1 0
5 1 2 2 (employees 6 and 7)
6 2 2 1 (employee 7)
7 3 2 0
...该查询将选择员工 3、4、6 和 7,因为他们是少于 2 名员工且薪水高于他们的员工。
关于mysql - 无法理解查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6401585/