任何人都可以解释我这个查询如何工作,并从工资表中找到第n个最高工资。谁能告诉我,这个查询如何工作?
SELECT salary FROM salary_master s1
WHERE (n-1) = (SELECT COUNT(*) FROM salary_master WHERE salary > s1.salary)
我的意思是,这个查询将遍历所有的值?
帮帮我。
任何人都可以解释我这个查询如何工作,并从工资表中找到第n个最高工资。谁能告诉我,这个查询如何工作?
SELECT salary FROM salary_master s1
WHERE (n-1) = (SELECT COUNT(*) FROM salary_master WHERE salary > s1.salary)
我的意思是,这个查询将遍历所有的值?
帮帮我。
子查询将计算'有多少元素有更大的工资,那么当前元素'。然后,您的主要查询将检查表中当前元素是否具有薪水较高的n-1元素。
例如,对于n = 5,查询将搜索其他4个元素的薪水更高的元素。因此它会发现第五高。
虽然这不是最好的方法。考虑使用ORDER BY和LIMIT ...
不,这不会迭代等等。这仍然是一个正常的查询。
如您所见,它计算子查询中大于当前行条目的所有工资。
所以,如果你是最高收入者,你应该没有超过你的工资,所以这就是-1。
不会找到第n个最高的薪水,但这会:
SELECT salary
FROM salary_master
ORDER BY salary DESC
OFFSET n
LIMIT 1
是salary列索引? – Chandu 2011-03-04 07:53:07
没有..它没有编入索引。 – Jimit 2011-03-04 07:54:25
然后,这将工作,但不是很快:) – Konerak 2011-03-04 07:54:55