2011-03-04 75 views
0

任何人都可以解释我这个查询如何工作,并从工资表中找到第n个最高工资。谁能告诉我,这个查询如何工作?

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

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

帮帮我。

+0

是salary列索引? – Chandu 2011-03-04 07:53:07

+0

没有..它没有编入索引。 – Jimit 2011-03-04 07:54:25

+0

然后,这将工作,但不是很快:) – Konerak 2011-03-04 07:54:55

回答

1

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

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

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

2

不,这不会迭代等等。这仍然是一个正常的查询。

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

所以,如果你是最高收入者,你应该没有超过你的工资,所以这就是-1。

3

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

SELECT salary 
FROM salary_master 
ORDER BY salary DESC 
OFFSET n 
LIMIT 1 
相关问题