繁体   English   中英

从每个部门获得员工的前2名薪水差异

[英]Get difference in top 2 salary of employee from each department

我有一个简单的员工表,我需要在每个表中找到具有最高等级的两个部门的最高工资之间的差异。 我有以下表格列: deptsalrank

样本数据可能是

Dept        Sal     Rank
Finance     10000   1
Finance     20000   2
Finance     11000   1
Finance     15000   3
Finance     45000   4
Finance     42000   4
Operations  17000   1
Operations  12000   1
Operations  15000   2
Operations  19000   2

所需的输出是

Dept        Diff    Rank
Finance     3000    4
Operations  4000    2

我设法以一种非常非常低效的方式获取了前2个记录。 我正在使用mysql服务器。

这是查询

SELECT *
FROM   emps s
WHERE 
        (
            SELECT  COUNT(*) 
            FROM    emps  f
            WHERE f.dept = s.dept AND 
                  f.rank >= s.rank
        ) <= 2

我需要进一步的帮助以获取输出。

您可以尝试以下查询:

SELECT Dept, MAX(Rank) AS Rank,
       SUM(CASE 
              WHEN rnk = 1 THEN Sal 
              WHEN rnk = 2 THEN -Sal 
              ELSE 0
           END) AS diff
FROM (
   SELECT @rnk := IF(@dept = Dept, @rnk + 1,
                     IF(@dept := Dept, 1, 1)) AS rnk,
          Dept, Sal, Rank                  
   FROM emp
   CROSS JOIN (SELECT @rnk := 0, @dept = '') AS vars
   ORDER BY Dept, Rank DESC, Sal DESC) AS t
GROUP BY Dept   

该查询使用变量根据RankSal值为每个记录分配一个排名编号。 外部查询使用变量值并执行条件聚合以计算第一和第二排名记录之间的差异。

在这里演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM