谁能告诉我,这个查询是如何工作的?

时间:2011-03-04 07:49:03

标签: sql

任何人都可以向我解释这个查询是如何工作的,并从工资表中找到第n个最高工资。

SELECT salary FROM salary_master s1 
WHERE (n-1) = (SELECT COUNT(*) FROM salary_master WHERE salary > s1.salary)

我的意思是,这个查询会遍历所有值吗?

帮助我。

3 个答案:

答案 0 :(得分:3)

找不到第n个最高薪水,但这会:

SELECT salary
FROM salary_master
ORDER BY salary DESC
OFFSET n
LIMIT 1

答案 1 :(得分:2)

不,这不会迭代。这仍然是一个普通的查询。

如您所见,它会计算子查询中大于当前行条目的所有工资。

所以,如果你是最高收入者,你应该没有比你更高的工资,所以这就是为什么-1。

答案 2 :(得分:1)

子查询将计算“有多少元素的工资大于当前元素”。然后,您的主查询检查表中的当前元素是否具有n-1个具有更高薪水的元素。

例如,对于n = 5,查询将搜索其他4个元素具有更高薪水的元素。因此,它将找到第五高。

但这并不是最好的方法。考虑使用ORDER BY和LIMIT ......