我想从一个表中的每个部门中找到两个最高薪水,该表有部门编号、薪水和各种其他列。我得到了这个答案;它确实有效,但我无法理解其中的逻辑。
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/