[英]Get difference in top 2 salary of employee from each department
我有一个简单的员工表,我需要在每个表中找到具有最高等级的两个部门的最高工资之间的差异。 我有以下表格列: dept
, sal
, rank
样本数据可能是
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
该查询使用变量根据Rank
和Sal
值为每个记录分配一个排名编号。 外部查询使用变量值并执行条件聚合以计算第一和第二排名记录之间的差异。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.