转载注明出处: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/