转载注明出处:http://www.cnblogs.com/liangyongrui/p/8622593.html
Mysql 查找表中的前n大元素
用程序写很简单,利用堆维护一下就行了,但是用sql呢?
解法:
假设需要比较的字段是a,找出前n大的行,则答案为count(比a小的行) < n的行。(说起来有点绕。。看个例子就懂了)
假设有这样的一个表
| Id | Name | Salary |
|---|---|---|
| 1 | Joe | 70000 |
| 2 | Henry | 80000 |
| 3 | Sam | 60000 |
| 4 | Max | 90000 |
| 5 | Janet | 69000 |
| 6 | Randy | 85000 |
找出薪水的前三名
SELECT
e1.Name,
e1.Salary
FROM Employee e1
WHERE 3 >
(
SELECT count(DISTINCT e2.Salary)
FROM Employee e2
WHERE e2.Salary > e1.Salary
);结果为
| Name | Salary |
|---|---|
| Joe | 70000 |
| Henry | 80000 |
| Max | 90000 |
参考资料:https://leetcode.com/problems/department-top-three-salaries/solution/