MSSQL示例(三)ROWNUMBER、RANK、DENSE_RANK、NTILE排名窗口函数示例

-- =============================================

-- Author:  tomtom

-- Create date: 2015.2.27

-- Description: ROWNUMBER、RANK、DENSE_RANK、NTILE排名窗口函数示例

-- =============================================

/*1.准备数据(去掉注释再执行--!)

create table t1

(

id int identity(1,1) primary key,

name varchar(50),

qty int default(0)

)

go

insert into t1(name,qty) select ‘a1‘,1

insert into t1(name,qty) select ‘a3‘,3

insert into t1(name,qty) select ‘a2‘,2

insert into t1(name,qty) select ‘a5‘,5

insert into t1(name,qty) select ‘a2‘,22

insert into t1(name,qty) select ‘a2‘,21

insert into t1(name,qty) select ‘a2‘,20

insert into t1(name,qty) select ‘a1‘,11

insert into t1(name,qty) select ‘a1‘,12

insert into t1(name,qty) select ‘a5‘,50

select * from t1

*/

/*2.1示例 OVER+ODER BY*/

select t1.*

,ROW_NUMBER() OVER( ORDER BY name,id) as ‘ROW_NUMBER‘

,ROW_NUMBER() OVER( ORDER BY name desc,id desc) as ‘ROW_NUMBER_DESC‘

,RANK() OVER( ORDER BY name) as ‘RANK‘

,RANK() OVER( ORDER BY name,id) as ‘RANK_name_id‘

,DENSE_RANK() OVER( ORDER BY name) as ‘DENSE_RANK‘

,t1.name

,NTILE(1) OVER( ORDER BY name,id) as ‘NTILE_1group‘

,NTILE(2) OVER( ORDER BY name,id) as ‘NTILE_2g‘

,NTILE(3) OVER( ORDER BY name,id) as ‘NTILE_3g‘

,NTILE(4) OVER( ORDER BY name,id) as ‘NTILE_4g‘

--NTILE(分组数目)平均有余时,从最后的组倒分平均:avg=2 for 4,avg=2 for 3,avg=3 for 2 and 1

from t1

order by t1.name,id

/*2.2示例 OVER + PATITION BY + ODER BY*/

--加了PATITION,将会先PATITION成多个分区,然后在分区内部排名,各区的排名互不干扰,排名计数器各自独立从0开始

select t1.*

,ROW_NUMBER() OVER( PARTITION BY name ORDER BY name,id ) as ‘ROW_NUMBER‘

,ROW_NUMBER() OVER( PARTITION BY name ORDER BY name desc,id desc) as ‘ROW_NUMBER_DESC‘

,RANK() OVER( PARTITION BY name ORDER BY name) as ‘RANK‘

,RANK() OVER( PARTITION BY name ORDER BY name,id) as ‘RANK_name_id‘

,DENSE_RANK() OVER( PARTITION BY name ORDER BY name) as ‘DENSE_RANK‘

,t1.name

,NTILE(1) OVER( PARTITION BY name ORDER BY name,id) as ‘NTILE_1group‘

,NTILE(2) OVER( PARTITION BY name ORDER BY name,id) as ‘NTILE_2g‘

,NTILE(3) OVER( PARTITION BY name ORDER BY name,id) as ‘NTILE_3g‘

,NTILE(4) OVER( PARTITION BY name ORDER BY name,id) as ‘NTILE_4g‘

from t1

order by t1.name,id

时间: 2024-11-02 21:29:45

MSSQL示例(三)ROWNUMBER、RANK、DENSE_RANK、NTILE排名窗口函数示例的相关文章

sqlserver 中row_number,rank,dense_rank,ntile排名函数的用法

1.row_number() 就是行号 2.rank:类似于row_number,不同之处在于,它会对order by 的字段进行处理,如果这个字段值相同,那么,行号保持不变 3.dense_rank:与rank类似,不同之处在于行号是否保留一个位置,rank对保留这个位置,即上面图中,row的值由1直接变为3,因为它的1出现了两次,所以为2保留了一个位置,而dense_rank不会保留2这个位置,即实现的行号2其实是排在了第3位 4.ntile函数可以对序号进行分组处理.这就相当于将查询出来的

ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()

ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over() 今天女票问我SqlServer的四种排序,当场写了几句Sql让她了解,现把相关Sql放上来. 首先,我们创建一些测试数据. if OBJECT_ID('Tempdb.dbo.#Tmp') is not null drop table #Tmp create table #Tmp ( name nvarchar(10) ) insert into #Tmp select N'张三' union sele

SqlServer四种排序:ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()

今天女票问我SqlServer的四种排序,当场写了几句Sql让她了解,现把相关Sql放上来. 首先,我们创建一些测试数据. 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'赵六' u

Hive分析窗口函数(二) NTILE,ROW_NUMBER,RANK,DENSE_RANK

问题导读: 1.NTILE作用是什么? 2.按照pv降序排列,生成分组内每天的pv名次可使用哪个窗口函数? 3.RANK 和 DENSE_RANK作用是什么? 接上篇:Hive分析窗口函数(一)SUM,AVG,MIN,MAX 本文中介绍前几个序列函数,NTILE,ROW_NUMBER,RANK,DENSE_RANK,下面会一一解释各自的用途. Hive版本为 apache-hive-0.13.1 注意: 序列函数不支持WINDOW子句.(什么是WINDOW子句,Hive分析窗口函数(一)SUM,

Spark2 DataFrame数据框常用操作(九)之分析函数--排名函数row_number,rank,dense_rank,percent_rank

select gender,       age,       row_number() over(partition by gender order by age) as rowNumber,       rank() over(partition by gender order by age) as ranks,       dense_rank() over(partition by gender order by age) as denseRank,       percent_rank

[转]oracle分析函数Rank, Dense_rank, row_number

oracle分析函数Rank, Dense_rank, row_number 分析函数2(Rank, Dense_rank, row_number)   目录 =============================================== 1.使用rownum为记录排名 2.使用分析函数来为记录排名 3.使用分析函数为记录进行分组排名 一.使用rownum为记录排名: 在前面一篇<Oracle开发专题之:分析函数>,我们认识了分析函数的基本应用,现在我们再来考虑下面几个问题:

oracle分析函数Rank, Dense_rank, row_number

http://www.cnblogs.com/wuyisky/archive/2010/02/24/oracle_rank.html 目录===============================================1.使用rownum为记录排名2.使用分析函数来为记录排名3.使用分析函数为记录进行分组排名 一.使用rownum为记录排名:在前面一篇<Oracle开发专题之:分析函数>,我们认识了分析函数的基本应用,现在我们再来考虑下面几个问题: ①对所有客户按订单总额进行排名

【UNIX网络编程(三)】TCP客户/服务器程序示例

上一节给出了TCP网络编程的函数,这一节使用那些基本函数编写一个完成的TCP客户/服务器程序示例. 该例子执行的步骤如下: 1.客户从标准输入读入一行文本,并写给服务器. 2.服务器从网络输入读入这行文本,并回射给客户. 3.客户从网络输入读入这行回射文本,并显示在标准输出上. 用图描述如下: 编写TCP回射服务器程序如下: #include <stdio.h> #include <errno.h> #include <stdlib.h> #include <st

DevExpress XtraGrid网格控件示例三:获取当前处于编辑状态的值

使用下面的示例代码,以获得当前编辑的值. C# 1 string editingValue; 2 if(gridControl1.KeyboardFocusView.IsEditing) 3 editingValue = gridControl1.KeyboardFocusView.EditingValue.ToString(); DevExpress XtraGrid网格控件示例三:获取当前处于编辑状态的值,布布扣,bubuko.com