标题: OVER子句中排序函数的用法 [打印本页] 作者: 叶彦召 时间: 2012-2-29 00:39 标题: OVER子句中排序函数的用法 OVER子句支持四种排名函数:ROW_NUMBER()、RANK()、DENSE_RANK()、NTIL()。
先直接给一个例子吧:
select orderid,custid,val,
ROW_NUMBER() OVER(ORDER BY val) as rownum,
RANK() OVER(ORDER BY val) as rank,
DENSE_RANK() OVER(ORDER BY val) as dense_rank,
NTILE(10) OVER(ORDER BY val) as ntile
from OrderValue;
查询结果如下图所示:
和聚合函数一样,排名函数也支持在OVER子句中使用PARTITION BY语句。例如,与在整个集合中分配行号不同,表达式ROW_NUMBER() OVER(PARTITION BY custid ORDER BY val)为各行中具有相同custid的子集独立的分配行号。在一下查询中使用了这个表达式:
select orderid,custid,val,
ROW_NUMBER() OVER(PARTITION BY custid ORDER BY val) as rownum
from OrderValue;
查询结果如下图: