我想在一个表中找到每个部门的两个最高薪水,该表有部门编号、薪水和其他各种列。我得到了这个答案;它肯定有效,但我无法理解其中的逻辑。

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/

10-13 05:26