Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 按给定等级查找所有实体_Sql Server_Dense Rank - Fatal编程技术网

Sql server 按给定等级查找所有实体

Sql server 按给定等级查找所有实体,sql-server,dense-rank,Sql Server,Dense Rank,我试图理解T-SQL中的排名函数,但我不确定我是否理解。我正在练习DENSE\u RANK(),在理解这里发生的事情时遇到困难: SELECT EmployeeID, FirstName, LastName, Salary, DENSE_RANK() OVER (PARTITION BY Salary ORDER BY EmployeeID) AS Rank FROM Employees WHERE Salary BETWEEN 10000 AND 500

我试图理解T-SQL中的排名函数,但我不确定我是否理解。我正在练习
DENSE\u 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的实体

这种行为是正确的。您正在根据薪资创建一个组,然后根据员工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\u id
列执行排序


如果不使用
PARTITION BY
,则整个数据集都是单个分区,排名基于降薪值。

行为是正确的。您正在根据薪资创建一个组,然后根据员工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\u id
列执行排序

如果没有
partitionby
,则整个数据集是单个分区,排名基于降序工资值

为什么薪酬相同的栏目排名不同

如果您不想看到同一薪水的不同等级,请尝试以下内容

   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 = 2
为什么薪酬相同的栏目排名不同

如果您不想看到同一薪水的不同等级,请尝试以下内容

   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 = 2

谢谢你的回复!我很感激,但我不确定我是否理解它是如何工作的。(
DENSE\u RANK()
)@AndrewRogers我已经扩展了答案谢谢你的回复!我很感激,但我不确定我是否理解它是如何工作的。(
DENSE\u RANK()
)@AndrewRogers我已经扩展了答案