按给定等级查找所有实体
Find all entities by given rank
我想了解 T-SQL 中的排名函数,但我不确定自己是否了解。我正在练习 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
为什么薪水相同的列有不同的排名?
The rows within a partition that have the same values will receive the same rank.
我的下一个问题是是否可以只找到 Rank 为 2 的实体?
行为正确。您正在根据薪水创建一个组,然后按员工 ID
排序
我猜你想要:
DENSE_RANK() OVER(ORDER BY Salary DESC) AS Rank
要过滤您需要使用内联的行 view/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
编辑:
Why columns with equal salaries have a different rank?
问题是您根据薪水对数据进行了分区。具有相同值的工资在一个组中。现在,通过使用每个员工不同的 employee_id
列执行该组排序。
没有 PARTITION BY
整个数据集是单个分区,排名基于降序的薪水值。
Why columns with equal salaries have a different rank?
如果您不想看到相同薪水的不同排名,请尝试以下操作
DENSE_RANK() OVER (ORDER BY Salary desc) AS Rank,
My next question is if it's possible to find only the entities whose Rank is 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 = 2
我想了解 T-SQL 中的排名函数,但我不确定自己是否了解。我正在练习 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
为什么薪水相同的列有不同的排名?
The rows within a partition that have the same values will receive the same rank.
我的下一个问题是是否可以只找到 Rank 为 2 的实体?
行为正确。您正在根据薪水创建一个组,然后按员工 ID
排序我猜你想要:
DENSE_RANK() OVER(ORDER BY Salary DESC) AS Rank
要过滤您需要使用内联的行 view/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
编辑:
Why columns with equal salaries have a different rank?
问题是您根据薪水对数据进行了分区。具有相同值的工资在一个组中。现在,通过使用每个员工不同的 employee_id
列执行该组排序。
没有 PARTITION BY
整个数据集是单个分区,排名基于降序的薪水值。
Why columns with equal salaries have a different rank?
如果您不想看到相同薪水的不同排名,请尝试以下操作
DENSE_RANK() OVER (ORDER BY Salary desc) AS Rank,
My next question is if it's possible to find only the entities whose Rank is 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 = 2