首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不带排名函数的排名

不带排名函数的排名
EN

Stack Overflow用户
提问于 2010-09-08 19:54:59
回答 3查看 8.2K关注 0票数 1

我编写了以下查询,以便选择每个客户的排名,并在输出中显示它与其他信息。

代码语言:javascript
复制
use northwind
go

select 
Employees.EmployeeID as ID, 
FirstName+' '+LastName as Name,
DENSE_RANK() over (order by SUM(Orders.OrderID)) as [Rank]
from 
employees 
inner join 
orders 
on
Employees.EmployeeID = Orders.EmployeeID
group by 
Employees.EmployeeID, 
FirstName+' '+LastName

但我想知道如何在不使用DENSE_RANK()函数的情况下进行排名工作。有可能吗?

EN

回答 3

Stack Overflow用户

发布于 2010-09-08 20:03:46

可以,只需计算(排序列)值小于当前行排序列值的行数...

代码语言:javascript
复制
   Select *, 
         (Select Count(*) From Table 
          Where SortColumn <= t.SortColumn) as Rank
   From table t

注意:如果您不想计算重复项,则排序列应该是唯一的。例如,如果你想对测试分数进行排名,那么这种技术会给每个得分相同的人相同的排名,而不是随机地给他们分配不同的排名)。

在您示例中,

代码语言:javascript
复制
Select e.EmployeeID as ID,   
   FirstName+' '+LastName as Name,  
   (Select Count(*) From Employees
    Where EmployeeID <= e.EmployeeId)  
From employees e  
   Join Orders o  
      On e.EmployeeID = o.EmployeeID  
Group by e.EmployeeID, FirstName+' '+LastName 
票数 3
EN

Stack Overflow用户

发布于 2010-09-08 20:24:09

如果不使用dense_rank,基本上就会有一个版本的运行总数问题。

这是很难在SQL中以有效方式完成的事情。您可以使用Charles的答案中的三角形连接。但是,如果您有几百条以上的记录,您会发现这是游标无法完成的。

你为什么不想使用dense_rank

票数 0
EN

Stack Overflow用户

发布于 2019-11-19 14:30:15

-不带Rank函数的排名销售员脚本

代码语言:javascript
复制
select salesperson_id ,amt , 
  (select count(*) + 1 from 
       (select sum(sales_amount)as Amt 
              from sales group by salesperson_id order by sum(sales_amount) desc )B
        where A.amt < b.amt ) as Rank
 from 
 (select salesperson_id,sum(sales_amount)as Amt from sales group by salesperson_id order by sum(sales_amount) desc ) A
 order by amt desc;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3667426

复制
相关文章

相似问题

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