gpt4 book ai didi

mysql - 根据薪水为每个部门排名

转载 作者:行者123 更新时间:2023-11-29 02:12:31 24 4
gpt4 key购买 nike

我有下表格式,其中包含 100 个值,其中包含 10 个不同的部门,

Dept  name  salary
1 e1 100
1 e2 120
1 e3 140
1 e4 150

我想根据每个部门的薪水(最高到最低)返回每个部门的排名。如果薪水相同,则排名也应该相同。

SELECT    Dept,
name,
salary,
@curRank := @curRank + 1 AS Order_emp
FROM emp p, (SELECT @curRank := 0) r
ORDER BY Dept, salary DESC;

上面的查询不断返回排名。但是我需要每个部门的排名。

提前致谢。

最佳答案

另一种不使用用户定义变量并使用相关子查询的方法

select a.*,
(select count(distinct salary)
from emp
where Dept = a.Dept
and a.salary <= salary
) rank
from emp a
order by Dept,rank

DEMO

解释

在上面的查询中,所有的表数据都将通过相关子查询连同每一行的排名一起获取,在子查询中,不同薪水记录的计数将从同一个表中返回,但部门相同(对于父查询和子查询查询表)和外表的薪水小于或等于子查询表的薪水所以考虑以下数据集

Dept  name  salary
1 e1 100
1 e2 120
1 e3 150
1 e4 150

有 2 名员工共享相同的薪水 = 150 所以回到我们父表最后一行的条件

1     e4    150

子查询将计算 a.150 <= emp 和 dept 的薪水相同,因此表中有 2 行 (150,150) 通过计算不同的薪水,它将返回 1,同样的情况适用于倒数第二行。

让我们再次考虑父表的下一行

1     e2    120

子查询将计算 a.120 <= 来自 emp 和 dept 的薪水相同,因此表 (120,150,150) 中有 3 行,通过计算不同的薪水,它将返回为 2

希望这是有道理的

关于mysql - 根据薪水为每个部门排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48001739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com