我正在尝试理解 to 中的排序函数,但我不确定我是否理解。我正在练习DENSE_RANK(),并且很难理解这里发生的事情:
SELECT
EmployeeID,
FirstName,
LastName,
Salary,
DENSE_RANK() OVER
(PARTITION BY Salary ORDER BY EmployeeID) AS Rank
FROM Employees
WHERE Salary BETWEEN 10000 AND 50000
ORDER BY Salary DESC

为什么同等薪水的栏目有不同的职级?
具有相同值的分区中的行将获得相同的等级。
我的下一个问题是,是否可能只找到等级为2的实体?
发布于 2019-08-31 16:09:15
这种行为是正确的。您正在创建一个基于薪资的组,然后按员工id订购。
我猜你想:
DENSE_RANK() OVER(ORDER BY Salary DESC) AS Rank要筛选行,需要使用内联视图/cte:
WITH cte AS (
SELECT
EmployeeID,
FirstName,
LastName,
Salary,
DENSE_RANK() OVER(ORDER BY Salary DESC) AS Rank
FROM Employees
WHERE Salary BETWEEN 10000 AND 50000
)
SELECT *
FROM cte
WHERE Rank = 2
ORDER BY Salary DESC编辑:
为什么同等薪水的栏目有不同的职级?
问题是您根据薪资对数据进行了分区。具有相同价值的薪资属于单一组。现在,对于该组,通过使用employee_id列执行排序,该列与每个员工不同。
没有PARTITION BY,整个数据集是单个分区,级别是基于降薪值的。
发布于 2019-08-31 16:15:31
为什么同等薪水的栏目有不同的职级?
如果你不想看到相同薪水的不同职级,试着跟随
DENSE_RANK() OVER (ORDER BY Salary desc) AS Rank,我的下一个问题是,是否可能只找到排名为2的实体?
您可以使用子查询方法或CTE,下面是子查询示例
select *
from (
SELECT
EmployeeID,
FirstName,
LastName,
Salary,
DENSE_RANK() OVER (ORDER BY Salary desc) AS Rank
FROM Employees
WHERE Salary BETWEEN 10000 AND 50000
) as t
where r.rank = 2https://stackoverflow.com/questions/57739642
复制相似问题