ROW_NUMBER()在查询业绩排名中的使用

Posted buzhengsi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ROW_NUMBER()在查询业绩排名中的使用相关的知识,希望对你有一定的参考价值。

想要查看每月销售业绩汇总并找出前3名时发现无法使用TOP实现,求助后得到以下方法实现。

 

with a
as
(
SELECT Salesperson,Left(orderdate,6) AS Month,   SUM(CONVERT(decimal(13,2),TaxAmount)) AS TotalAmount
FROM ImportOrder
WHERE DATEDIFF(YEAR,orderdate,GETDATE()) = 1  --查找的是去年的数据,所以差异为1。
GROUP BY Salesperson, Left(orderdate,6)
),
b as
(
select Salesperson,[Month],TotalAmount,ROW_NUMBER() over (partition by [Month] order by TotalAmount DESC) as rank_ from a --使用DESC是找出业绩最大的,去除即为找出业绩最差的。
)
select Salesperson,[Month],TotalAmount from b where rank_ <=3  --只找出前3名。
ORDER BY Month DESC, TotalAmount DESC

以上是关于ROW_NUMBER()在查询业绩排名中的使用的主要内容,如果未能解决你的问题,请参考以下文章

ROW_NUMBER 和 PARTITION 查询返回所有排名为 1 的行

Oracle:row_number()rank()dense_rank()

MySql中row_number()rank()dense_rank() 的区别

如何row_number()mysql中的排名数据集

MySQL实现SQL Server排名函数

MySQL实现SQL Server排名函数