mysql - 无法理解查询

标签 mysql sql

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

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/

相关文章:

Mysql存储函数嵌套查询(INSERT查询中的SELECT)

PHP将下拉值保存到mysql

php - SmartyWhere子句不过滤数据

sql - 用于 FireBird 数据库的 Firebird 数据库和 Linux Red Hat Base Server

sql - 根据唯一 ID 将记录拆分为具有不同值的 2 条记录

java - Oracle 日期转换错误 ORA-01858

php - 使用 mysql_query() 使用数字序列更新表行

Mysql select语句包含where子句所以不适合插入

sql - Oracle 对非分层数据的分层查询

sql - 无法删除 Azure SQL 托管实例资源