`
pavel
  • 浏览: 941842 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SQLServer2005新增序列功能的几个函数:ROW_NUMBER, RANK, DENSE_RANK, and NTILE

阅读更多
1 ROW_NUMBER
SELECT ProductID, Name, Price, 
       ROW_NUMBER() OVER(ORDER BY Price DESC) As PriceRank
FROM Products

 

 

ProductID Name Price PriceRank
8 Desk 495.0000 1
10 Executive Chair 295.0000 2
9 Chair 125.0000 3
5 Mouse 14.9500 4
6 Mousepad 9.9900 5
11 Scissors 8.5000 6
4 Stapler 7.9500 7
3 Binder 1.9500 8
...

 

SELECT c.Name, o.DateOrdered, tab.TotalOrderAmount, 
       ROW_NUMBER() OVER (PARTITION BY c.CustomerID ORDER BY TotalOrderAmount DESC) AS BestCustomer
FROM vwTotalAmountBilledPerOrder AS tab 
       INNER JOIN Orders AS o ON 
           o.OrderID = tab.OrderID 
       INNER JOIN Customers AS c ON 
           c.CustomerID = o.CustomerID

 

 

Name DateOrdered TotalOrderAmount BestCustomer
Bob 12/1/2005 12649.9900 1
Bob 12/19/2005 265.8500 2
Tito 12/22/2005 14.9500 1
Tito 12/18/2005 12.4400 2
Darren 1/2/2006 620.0000 1
Bruce 1/5/2006 14.9500 1
Bruce 1/4/2006 9.9900 2
Lee Ann 1/3/2006 8.5000 1
...

2 RANK

 

SELECT c.Name, o.DateOrdered, tab.TotalOrderAmount, 
       RANK() OVER (ORDER BY TotalOrderAmount DESC) AS BestCustomer
FROM vwTotalAmountBilledPerOrder AS tab 
       INNER JOIN Orders AS o ON 
           o.OrderID = tab.OrderID 
       INNER JOIN Customers AS c ON 
           c.CustomerID = o.CustomerID

 

 

Name DateOrdered TotalOrderAmount BestCustomer
Bob 12/1/2005 12649.9900 1
Darren 1/2/2006 620.0000 2
Bob 12/19/2005 265.8500 3
Tito 12/22/2005 14.9500 4
Bruce 1/5/2006 14.9500 4
Tito 12/18/2005 12.4400 6
Bruce 1/4/2006 9.9900 7
Lee Ann 1/3/2006 8.5000 8
...

3 NTILE

SELECT ProductID, Name, Price, NTILE(4) OVER (ORDER BY Price DESC) as Quartile
FROM Produts

 

 

ProductID Name Price Quartile
8 Desk 495.0000 1
10 Executive Chair 295.0000 1
9 Chair 125.0000 2
5 Mouse 14.9500 2
6 Mousepad 9.9900 3
11 Scissors 8.5000 3
4 Stapler 7.9500 4
3 Binder 1.9500 4
分享到:
评论

相关推荐

    SQL Server 2005 提供了4个行号排序函数

    本文将详细介绍这四个行号排序函数:`ROW_NUMBER()`、`RANK()`、`DENSE_RANK()` 和 `NTILE()` 的用法和应用场景。 #### 二、ROW_NUMBER() `ROW_NUMBER()` 函数为分区中的每一行分配一个唯一的数字。该函数对于实现...

    SQL Server 2005下T-SQL增强功能的研究和应用.pdf

    其中最显著的改进之一是引入了四个新的排名函数:ROW_NUMBER()、RANK()、DENSE_RANK()和NTILE()。这些函数极大地简化了排名计算的过程。 1. ROW_NUMBER()函数用于为每一行数据赋予一个唯一的序号,类似于Oracle中的...

    SqlServer 2005的排名函数使用小结

    本篇文章主要总结了三种主要的排名函数:ROW_NUMBER、RANK和DENSE_RANK,以及 NTILE 函数的使用方法。 1. ROW_NUMBER() 函数: ROW_NUMBER() 用于为查询结果集中的每一行提供一个唯一的行号,这个行号是基于指定的...

    T-SQL性能调优秘笈—基于SQL Server 2012窗口函数源代码

    1. **排名函数**:ROW_NUMBER(), RANK() 和 DENSE_RANK(),它们可以为数据集中的每一行分配一个唯一的排名值,有助于实现分组和排序。 2. **聚合函数**:SUM(), AVG(), COUNT(), MAX(), MIN() 等在窗口内执行聚合...

    SQL Server 总结复习 (二)

    在SQL Server中,数据库操作和数据分析常常涉及到对数据的排序和排名,这正是`ROW_NUMBER()`,`RANK()`,`DENSE_RANK()`以及`NTILE()`等排名函数的用武之地。这些函数可以帮助我们更好地理解和处理数据集,特别是在...

    expert t_sql window functions in sql server

    1. **RANK()、ROW_NUMBER()和DENSE_RANK()**:这些函数用于为每个分区内的行分配一个唯一的排名。RANK()跳过任何空缺的排名,ROW_NUMBER()则不跳过,DENSE_RANK()在连续的相同值之间不产生空缺。 2. **LEAD()和LAG...

    SQL窗口函数速查表.pdf

    - **排名函数**:如`RANK()`, `DENSE_RANK()`, `ROW_NUMBER()`,用于为每个分组内的行分配唯一的排名值。 - **聚合函数**:如`SUM()`, `AVG()`, `COUNT()`, `MIN()`, `MAX()`,但带有`OVER()`子句,使得它们可以在...

    SQL-grammer-collection.zip_sql语句collection

    1. **窗口函数(Window Function)**: ROW_NUMBER(), RANK(), DENSE_RANK(), LAG(), LEAD(), NTILE()等,为数据分析提供强大的工具。 2. **集合操作(UNION, INTERSECT, EXCEPT)**: 合并、找出共同值或差异值。 3...

Global site tag (gtag.js) - Google Analytics