Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于MySQL查询的澄清_Mysql_Database_Join - Fatal编程技术网

关于MySQL查询的澄清

关于MySQL查询的澄清,mysql,database,join,Mysql,Database,Join,我想打印员工表中的第n个最高工资 查询是: SELECT * FROM emp E1 WHERE (n-1) = (SELECT count(distinct(E2.salary)) FROM emp E2 Where E2.salary< E1.salary) ORDER BY E1.salary ASC 虽然它工作得很好,但我无法解释它是如何工作的。有人能解释一下吗?这是MYSQL的一个特性 如果您有一个基本查询,您可以使用LIMI

我想打印员工表中的第n个最高工资

查询是:

SELECT *
FROM emp E1
WHERE
  (n-1) = (SELECT count(distinct(E2.salary))
           FROM emp E2 Where
           E2.salary< E1.salary)
ORDER BY
  E1.salary ASC

虽然它工作得很好,但我无法解释它是如何工作的。有人能解释一下吗?

这是MYSQL的一个特性

如果您有一个基本查询,您可以使用LIMIT

-- get the 9th highest salary
SELECT salary FROM tbl_salary
ORDER BY salary DESC
LIMIT 9,1
如果它是一个复杂的查询,您可以使用

-- get the 9th highest salary
select distinct(salary) from tbl_salary e1
where 9 = (
select count(salary) 
from tbl_salary e2
where e1.salary< e2.salary
)

可能更容易理解为:

select * From emp E1 
where n = 1 + 
         (select count(distinct E2.salary) 
          from emp E2 
          Where E2.salary > E1.salary)
或:

对于外部查询中的每个记录,子查询将返回同一表中第二个版本值中具有更高或相等值的所有不同薪资值的计数;然后,外部查询中的相等条件确保只选择与较高工资的n个数字匹配的记录


原始查询中的order by是不必要的。

我看起来很奇怪,这个n-1为什么这里缺少一些东西,例如变量n。它应该是n而不是n-1。这永远不会起作用,我不知道他怎么说它起作用,因为它会返回第n个最低工资记录,而不是第n个最高工资记录;否则,它应该会起作用。
select * From emp E1 
where n =(select count(distinct E2.salary) 
          from emp E2 
          Where E2.salary >= E1.salary)