实例讲解sql server排名函数DENSE_RANK的用法
一、需求
之前sql server 的排名函数用得最多的应该是RoW_NUMBER()了,我通常用ROW_NUMBER() + CTE 来实现分页;今天逛园,看到另一个内置排名函数还不错,自己顺便想了一个需求,大家可以花1分钟先想想要怎么实现。
需求很简单:求成绩排名前五的学生信息。
例如:
由于成绩可以并列,所以前五名可能有多个。例如:
测试数据:
declare @t table (ID int, StudentName nvarchar(15), Score int) insert into @t select 1,'黄一',99 union all select 2,'吴二',99 union all select 3,'张三',99 union all select 4,'李四',98 union all select 5,'王五',97 union all select 6,'赵六',96 union all select 7,'田七',95 union all select 8,'纪八',94 union all select 9,'邱九',93 union all select 10,'林十',92
二、自己实现
我的想法:既然可能出现并列,那么就用 DISTINCT 找到前五的成绩。ok,代码如下:
select t1.* from @t t1 join(select distinct top 5 Score from @t order by Score desc) t2 on t1.Score = t2.Score
看起来和上面的要求的结果还是不太一样,少了排序,当然我们可以在程序处理,这不是问题。
三、使用内置排名函数 DENSE_RANK
其实sql server已经内置了这样的函数可以帮助我们轻松实现,ok,直接上代码:
;with cte as( select dense_rank() over(order by Score desc) rank,* from @t ) select * from cte where rank < 6
四、扩展,内置排名函数RANK
与 DENSE_RANK类似还有一个RANK函数,不过RANK函数不会顺序排名,而是根据序号排。有点绕,把上面的函数改为RANK()就知道了,得到的结果如下:
以上就是sql server排名函数DENSE_RANK的使用方法,分享了自己的一些想法,希望对大家的学习有所启发。
相关推荐
-
SQL2005 四个排名函数(row_number、rank、dense_rank和ntile)的比较
排名函数是SQL Server2005新加的功能.在SQL Server2005中有如下四个排名函数: 1.row_number 2.rank 3.dense_rank 4.ntile 下面分别介绍一下这四个排名函数的功能及用法.在介绍之前假设有一个t_table表,表结构与表中的数据如图1所示: 图1 其中field1字段的类型是int,field2字段的类型是varchar 一.row_number row_number函数的用途是非常广泛,这个函数的功能是为查询出来的每一行记录生成一个序号
-
SQLSERVER 2005的ROW_NUMBER、RANK、DENSE_RANK的用法
ROW_NUMBER() 说明:返回结果集分区内行的序列号,每个分区的第一行从 1 开始.语法:ROW_NUMBER () OVER ( [ <partition_by_clause> ] <order_by_clause> ) .备注:ORDER BY 子句可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序.参数:<partition_by_clause> :将 FROM 子句生成的结果集划入应用了 ROW_NUMBER 函数的分区. <o
-
Oracle排名函数(Rank)实例详解
--已知:两种排名方式(分区和不分区):使用和不使用partition --两种计算方式(连续,不连续),对应函数:dense_rank,rank ·查询原始数据:学号,姓名,科目名,成绩 select * from t_score S_ID S_NAME SUB_NAME SCORE 1 张三 语文 80.00 2 李四 数学 80.00 1 张三 数学 0.00 2 李四 语文 50.00 3 张三丰 语文 10.00 3 张三丰 数学 3 张三丰 体育 120.00 4 杨过 JAVA 9
-
oracle排名函数的使用方法分享
在oracle中,有rank,dense_rank,row_number,以及分组排名partition. 说明: rank:排名会出现并列第n名,它之后的会跳过空出的名次,例如:1,2,2,4 dense_rank:排名会出现并列第n名,它之后的名次为n+1,例如:1,2,2,3 row_number:排名采用唯一序号连续值,例如1,2,3,4 partition:将排名限制到某一分组 格式: row_number() over(partition by bb.channel_name ord
-
SqlServer 2005的排名函数使用小结
尽管从技术上讲,其它排名函数的计算与ROW_NUMBER类似,但它们的的实际应用却少很多.RANK和DENSE--RANK主要用于排名和积分.NTILE更多地用于分析. 先创建一个示例表: 复制代码 代码如下: SET NOCOUNT ON USE [tempdb] IF OBJECT_ID('Sales')IS NOT NULL DROP TABLE sales CREATE TABLE Sales ( empid VARCHAR(10) NOT NULL PRIMARY KEY, mgrid
-
实例讲解sql server排名函数DENSE_RANK的用法
一.需求 之前sql server 的排名函数用得最多的应该是RoW_NUMBER()了,我通常用ROW_NUMBER() + CTE 来实现分页:今天逛园,看到另一个内置排名函数还不错,自己顺便想了一个需求,大家可以花1分钟先想想要怎么实现. 需求很简单:求成绩排名前五的学生信息. 例如: 由于成绩可以并列,所以前五名可能有多个.例如: 测试数据: declare @t table (ID int, StudentName nvarchar(15), Score int) insert int
-
实例讲解SQL Server加密功能
SQL Server中加密是层级的,每一个上层为下提供保护.如图: 实例: /** SMK(Service Master Key)在SQL Server安装时生成,由Windows DPAPI(Data Protection API)提供保护 **/ /**创建数据库级别DMK(Database Master Key),受SMK保护**/ create master key encryption by password=N'Passw0rd' go /**数据库内的加密对象受DMK保护 支持的对
-
Sql Server 开窗函数Over()的使用实例详解
利用over(),将统计信息计算出来,然后直接筛选结果集 declare @t table( ProductID int, ProductName varchar(20), ProductType varchar(20), Price int) insert @t select 1,'name1','P1',3 union all select 2,'name2','P1',5 union all select 3,'name3','P2',4 union all select 4,'name4
-
sql四大排名函数之ROW_NUMBER、RANK、DENSE_RANK、NTILE使用介绍
1.ROW_NUMBER() 定义:ROW_NUMBER()函数作用就是将select查询到的数据进行排序,每一条数据加一个序号,他不能用做于学生成绩的排名,一般多用于分页查询, 比如查询前10个 查询10-100个学生. 实例: 1.1对学生成绩排序 这里number就是每个学生的序号 根据studentScore(分数)进行desc倒序 1.2获取第二个同学的成绩信息 这里用到的思想就是 分页查询的思想 在原sql外再套一层select where t.number>=1 and
-
SQL查询排名函数实例
在实际开发中经常会遇到计算某个字段的排名的情况 如下表:totak_sales 现在又如此要求:按sales的逆序排序,要求添加一个sales_rank字段,显示排名顺序 方法: 复制代码 代码如下: SELECT a1.Name, a1.Sales, COUNT(a2.sales) Sales_Rank FROM Total_Sales a1, Total_Sales a2 WHERE a1.Sales <= a2.Sales or (a1.Sales=a2.Sales and a1.Name
-
SQL Server COALESCE函数详解及实例
SQL Server COALESCE函数详解 很多人知道ISNULL函数,但是很少人知道Coalesce函数,人们会无意中使用到Coalesce函数,并且发现它比ISNULL更加强大,其实到目前为止,这个函数的确非常有用,本文主要讲解其中的一些基本使用: 首先看看联机丛书的简要定义: 返回其参数中第一个非空表达式语法: COALESCE ( expression [ ,...n ] ) 如果所有参数均为 NULL,则 COALESCE 返回 NULL.至少应有一个 Null 值为 NULL
-
SQL Server分隔函数实例详解
有时候我们在SQL Server中需要对一些字符串进行分隔,比如a,b,c ,按照','进行分割,可以使用下边这个函数方法,新建方法如下: CREATE FUNCTION dbo.f_splitstr(@SourceSql NVARCHAR(MAX),@StrSeprate VARCHAR(100)) RETURNS @temp TABLE(F1 VARCHAR(100)) AS BEGIN DECLARE @ch AS VARCHAR(100) SET @SourceSql=@SourceSq
-
SQL Server DATEDIFF() 函数
定义和用法 DATEDIFF(datepart,startdate,enddate) startdate 和 enddate 参数是合法的日期表达式.datepart 参数可以是下列的值: 实例 select DATEDIFF(dd,'2021-12-01','2021-12-02 ')day --天数 select DATEDIFF(hh,'2021-12-01 08:00','2021-12-01 17:00') hour --小时 select DATEDIFF(mi,'2021-12-0
-
SQL Server DATEDIFF() 函数用法
定义和用法 DATEDIFF(datepart,startdate,enddate) startdate 和 enddate 参数是合法的日期表达式.datepart 参数可以是下列的值: 实例 select DATEDIFF(dd,'2021-12-01','2021-12-02 ')day --天数 select DATEDIFF(hh,'2021-12-01 08:00','2021-12-01 17:00') hour --小时 select DATEDIFF(mi,'2021-12-0
-
SQL Server系统函数介绍
一.常用函数: APP_NAME: 返回当前会话的应用程序名称(如果应用程序进行了设置). SELECT APP_NAME() COALESCE: 返回其参数中第一个非空表达式 SELECT COALESCE(NULL,NULL,123,NULL) COL_LENGTH(table,column):返回table表中column字段的长度: SELECT COL_LENGTH('person','gender'),COL_LENGTH('person','FirstName'); COL_NAM
随机推荐
- php发送get、post请求的6种方法简明总结
- Android开发实现读取excel数据并保存为xml的方法
- jquery和雅虎的yql服务实现天气预报服务示例
- vue 打包后的文件部署到express服务器上的方法
- javacript使用break内层跳出外层循环分析
- js中arguments的用法(实例讲解)
- windows中PHP5.2.14以及apache2.2.16安装配置方法第1/2页
- 利用Three.js如何实现阴影效果实例代码
- jQuery通过写入cookie实现更换网页背景的方法
- js实现自动图片轮播代码
- ASP+COM不得不注意的问题
- 小系统单据自动生成存储过程
- MongoDB加入到Windows服务的方法
- C语言 条件判断详细介绍
- indexOf 和 lastIndexOf 使用示例介绍
- Nginx服务器中浏览器本地缓存和虚拟机的相关设置
- 修改注册表 消除应用软件的乱码显示
- div+css div+css divcss布局入门教程 迅雷下载
- php实现的一段简单概率相关代码
- Android 登录密码信息进行RSA加密示例