mysql - 如何找到不同部门的第n个最高薪水?

标签 mysql sql

我正在尝试从列表中找出每个部门的第 n 大薪水。我能够使用聚合来完成基本的最小值和最大值,例如

Select DEPARTMENT, MAX(SALARY) FROM dept_salary
GROUP BY 1  

使用 MySQL 我能够根据个人而不是组合获得第 n 个薪水:

SELECT DISTINCT DEPARTMENT, SALARY FROM dept_salary
ORDER BY 2 DESC
LIMIT n,1

DEPARTMENT         SALARY
-------------------------
Customer Service   143937
Human Resources    141953
Customer Service   138637
Customer Service   137535
Customer Service   136548
Customer Service   135650
Marketing          135497
Customer Service   134893
Customer Service   133837
Customer Service   133569

如有任何关于如何让它工作的指示,我们将不胜感激。

最佳答案

对于一般的解决方案,变量是最简单的方法:

select ds.*
from (select ds.*,
             (@rn := if(@d = department, @rn + 1,
                        if(@d := department, 1, 1)
                       )
             ) as rn
      from (select distinct department, salary
            from dept_salary
           ) ds cross join
           (select @rn := 0, @d := '') params
      order by department, salary desc
     ) ds
where rn = 3;  -- for instance

关于mysql - 如何找到不同部门的第n个最高薪水?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45003868/

相关文章:

php - 即使在 codeigniter 中 db 的主机名错误,也继续执行

python - adsdb 插入

php - 新手问题--将多个.sql脚本调用到PHP文件中

mysql - MySQL中如何替换一个字段中的两个子字符串并将结果插入到另一字段中

MySQL 基于优先级值的行

mysql - 如何使用 MySql 查询显示所有非空和所有非空记录,而不提及 where 子句中的所有列名?

mysql - 如何使用 SQL 连接 postmeta 表并获取自定义字段日期之前的帖子

mysql - 笛卡尔积单表

mysql - 分组依据以查找 SQL 中特定索引的平均差异

sql - 将列更新为具有相同 ID 的另一行中该列的任何非未知值