首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按给定的等级查找所有实体

问按给定的等级查找所有实体
EN

Stack Overflow用户
提问于 2019-08-31 16:08:17
回答 2查看 155关注 0票数 0

我正在尝试理解 to 中的排序函数,但我不确定我是否理解。我正在练习DENSE_RANK(),并且很难理解这里发生的事情:

代码语言:javascript
复制
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的实体?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-31 16:09:15

这种行为是正确的。您正在创建一个基于薪资的组,然后按员工id订购。

我猜你想:

代码语言:javascript
复制
DENSE_RANK() OVER(ORDER BY Salary DESC) AS Rank

要筛选行,需要使用内联视图/cte:

代码语言:javascript
复制
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,整个数据集是单个分区,级别是基于降薪值的。

票数 2
EN

Stack Overflow用户

发布于 2019-08-31 16:15:31

为什么同等薪水的栏目有不同的职级?

如果你不想看到相同薪水的不同职级,试着跟随

代码语言:javascript
复制
   DENSE_RANK() OVER (ORDER BY Salary desc) AS Rank,

我的下一个问题是,是否可能只找到排名为2的实体?

您可以使用子查询方法或CTE,下面是子查询示例

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57739642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档