任何人都可以向我解释这个查询是如何工作的,并从工资表中找到第n个最高工资。
SELECT salary FROM salary_master s1
WHERE (n-1) = (SELECT COUNT(*) FROM salary_master WHERE salary > s1.salary)
我的意思是,这个查询会遍历所有值吗?
帮助我。
答案 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 ......