Mysql 查找表中的前n大元素

Posted 我好懒啊!(┬_┬)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql 查找表中的前n大元素相关的知识,希望对你有一定的参考价值。

博客已搬家,更多内容查看https://liangyongrui.github.io/

mysql 查找表中的多组前n大元素

如果时单组很简单,只需要排序后去前n个就行了,但是多组排序似乎就不是那么好做了。

解法:

假设需要比较的字段是a,找出前n大的行,则答案为count(比a小且和比较行在同一组的行) < n的行。(说起来有点绕。。看个例子就懂了)

假设有这样的一个表 Employee

Id Name Salary DepartmentId
1 Joe 70000 1
2 Henry 80000 2
3 Sam 60000 2
4 Max 90000 1
5 Janet 69000 1
6 Randy 85000 1

找出每个部门薪水的前三名

SELECT
  e1.DepartmentId department,
  e1.Name         Employee,
  e1.Salary
FROM
  Employee e1
WHERE
  3 > (SELECT COUNT(DISTINCT e2.Salary)
       FROM
         Employee e2
       WHERE
         e2.Salary > e1.Salary
         AND e1.DepartmentId = e2.DepartmentId
  );

结果为

Department Employee Salary
1 Joe 70000
2 Henry 80000
2 Sam 60000
1 Max 90000
1 Randy 85000

参考资料:https://leetcode.com/problems/department-top-three-salaries/solution/

以上是关于Mysql 查找表中的前n大元素的主要内容,如果未能解决你的问题,请参考以下文章

递归查找链表中的第 n 个到最后一个元素

从带有last.fm乱码的mysql表中查找给定年份的前100名[重复]

想在含有n个元素的序列中得到最小的前k个元素,最好采用啥排序算法

获得最少的前 n 行

使用 STL 算法查找集合中的前两个不相邻元素

哈希表中的查找