原文转载自:http://blog.csdn.net/a5685263/article/details/52187070
以下为转载内容:
首先,我们创建一些测试数据。
if OBJECT_ID('Tempdb.dbo.#Tmp') is not null drop table #Tmp create table #Tmp ( name nvarchar(10) ) insert into #Tmp select N'张三' union select N'李四' union select N'王五' union select N'赵六' union select N'朱七' union select N'王八' union all select N'张三'
PS:最后一个union用union all,因为我们多一行"张三"。
一、ROW_NUMBER() over(partition by columnname order by columnname):
select ROW_NUMBER()over(order by name) as num,* from #Tmp
可以得到按name排序的结果集。
ROW_NUMBER() over()还有一种用法,可以针对某列进行分组排序。
下面结果可以看到张三有1和2两个排序,而其他的名字排序都只有1。
select ROW_NUMBER()over(partition by name order by name) as num,* from #Tmp
结果:
二、RANK()over(order by columnname):
大家可以从下面的结果集看到,结果集少了5的编号,而有两个4的编号,然后直接跳到编号6。
select RANK()over(order by name),* from #Tmp
结果:
三、DENSE_RANK()over(order by columnname):
select DENSE_RANK()over(order by name),* from #Tmp
执行Sql后发现,下面的结果集有2个编号4的行,紧接着就是编号5的行。
DENSE_RANK()函数和RANK()函数差不多。
RANK()函数不管分几组,最后的编号一定和行数相同。
DENSE_RANK()函数最后的编号和分组的数目有关。
四、NTILE()OVER(ORDER BY COLUMNNAME):
select NTILE(2)over(order by name),* from #Tmp select NTILE(3)over(order by name),* from #Tmp
NTILE后面的数字,是要把查询得到的结果平均分为几组。
如下图分为2和3组。
如果行数平均划分后还有余行,那么就把行分在最前面的几组上。
比如我们的结果有7行,要分为3组。
那么第一组3行,第二组2行,第三组2行。
如果我们结果有14行,平均分为3组。
那么第一组5行,第二组5行,第三组4行。
依此类推。
相关推荐
rank函数与rank函数类似,同样考虑到了排序字段值相同的情况,但它的处理方式是连续分配序号,不会因为值的重复而跳过序号。还是以上述为例,当field1字段值相同时,dense_rank函数会连续分配序号,即后三条记录的...
SQL Server 2005 中提供了四个排名函数,分别是 row_number、rank、dense_rank 和 ntile。这四个函数的主要功能是为查询结果生成一个序号,用于实现查询指定范围的记录或实现分页功能。 一、row_number 函数 row_...
本文将详细介绍这四个行号排序函数:`ROW_NUMBER()`、`RANK()`、`DENSE_RANK()` 和 `NTILE()` 的用法和应用场景。 #### 二、ROW_NUMBER() `ROW_NUMBER()` 函数为分区中的每一行分配一个唯一的数字。该函数对于实现...
排名函数主要包括ROW_NUMBER、RANK、DENSE_RANK以及NTILE,它们各自有着不同的应用场景和功能。 1. NTILE函数 NTILE函数用于将一个有序分区的行分配到指定数量的组中。每个组都有一个从1开始的编号。例如,如果...
SQL Server 2005引入了四个排名函数,分别是`row_number`, `rank`, `dense_rank`, 和 `ntile`。这些函数帮助我们为查询结果集中的每一行赋予一个唯一的或基于特定条件的顺序编号。 1. `row_number()` `row_number...
在SQL Server中,数据库操作和数据分析常常涉及到对数据的排序和排名,这正是`ROW_NUMBER()`,`RANK()`,`DENSE_RANK()`以及`NTILE()`等排名函数的用武之地。这些函数可以帮助我们更好地理解和处理数据集,特别是在...
其中最显著的改进之一是引入了四个新的排名函数:ROW_NUMBER()、RANK()、DENSE_RANK()和NTILE()。这些函数极大地简化了排名计算的过程。 1. ROW_NUMBER()函数用于为每一行数据赋予一个唯一的序号,类似于Oracle中的...
在SQL Server中,T-SQL窗口函数是一种强大的工具,它允许开发者在一组相关行上执行计算,而不仅仅是当前行。这些函数在处理聚合、排序、分区数据时特别有用,为复杂的数据分析提供了便利。本主题将深入探讨T-SQL窗口...
这四个函数分别是ROW_NUMBER、RANK、DENSE_RANK和NTILE,它们都用于根据指定的排序标准为每一行赋予一个唯一的排名值。 1. ROW_NUMBER() 函数: ROW_NUMBER() 用于为数据集中的每一行分配一个唯一的连续数字,基于...
本篇文章主要总结了三种主要的排名函数:ROW_NUMBER、RANK和DENSE_RANK,以及 NTILE 函数的使用方法。 1. ROW_NUMBER() 函数: ROW_NUMBER() 用于为查询结果集中的每一行提供一个唯一的行号,这个行号是基于指定的...
其中一种常见的是排名功能,例如`ROW_NUMBER()`, `DENSE_RANK()`, `RANK()`和`NTILE()`。这些函数可以为每组数据生成唯一的序列号,根据指定的`ORDER BY`条件进行排序。 - `ROW_NUMBER()`为每组的行生成一个从1开始...
- **RANK()、ROW_NUMBER()和DENSE_RANK()**:这三个函数用于为每个分区内的行分配唯一的序列号。RANK()和ROW_NUMBER()类似,但当有相同值时,RANK()会跳过序号;DENSE_RANK()则不会跳过,会连续编号。 - **LEAD()...
除了`ROW_NUMBER()`,还有`RANK()`、`DENSE_RANK()`和`NTILE()`这三个排名函数。它们的主要区别在于处理相同值时生成的序号是否连续。`RANK()`在遇到重复值后会跳过下一个序号,`DENSE_RANK()`则不会,而`NTILE()`则...
SQL Server 2012 的开窗函数(Window Functions)是一种强大的分析工具,它允许你在结果集的基础上进行更复杂的计算,而无需通过子查询或自连接。这些函数可以在每个分组内或者整个数据集上执行聚合操作,同时保留...
SELECT column1, column2, ROW_NUMBER() OVER (ORDER BY column1) AS row_num FROM table_name; ``` - **解释**: 上述查询将为`table_name`中的每一行分配一个递增的序号,根据`column1`的值进行排序。 ##### 2....
- **排名函数**:如`RANK()`, `DENSE_RANK()`, `ROW_NUMBER()`,用于为每个分组内的行分配唯一的排名值。 - **聚合函数**:如`SUM()`, `AVG()`, `COUNT()`, `MIN()`, `MAX()`,但带有`OVER()`子句,使得它们可以在...