SQL四个排名函数的区别

/*
四个排名函数的区别:
RANK()
返回结果集的分区内每行的排名。行的排名是相关行之前的排名数加一。
如果两个或多个行与一个排名关联,则每个关联行将得到相同的排名。

DENSE_RANK()
返回结果集分区中行的排名,在排名中没有任何间断。行的排名等于所讨论行之前的所有排名数加一。
如果有两个或多个行受同一个分区中排名的约束,则每个约束行将接收相同的排名。

ROW_NUMBER()
返回结果集分区内行的序列号,每个分区的第一行从开始。
ORDER BY子句可确定在特定分区中为行分配唯一ROW_NUMBER的顺序。

NTILE()
将有序分区中的行分发到指定数目的组中。
各个组有编号,编号从一开始。对于每一个行,NTILE 将返回此行所属的组的编号。
*/

--创建测试数据表
DECLARE @table TABLE  (姓名 VARCHAR(4),成绩 INT)
insert into @table
SELECT '张三',129 UNION ALL
SELECT '李四',137 UNION ALL
SELECT '王二',137 UNION ALL
SELECT '小明',126 UNION ALL
SELECT '小六',126 UNION ALL
SELECT '小白',125 UNION ALL
SELECT '小黑',124 UNION ALL
SELECT '西大',123 UNION ALL
SELECT '小才',120 UNION ALL
SELECT '师兄',120 UNION ALL
SELECT '唐朝',99 UNION ALL
SELECT '尼玛',99

--查看一下
SELECT * FROM @table

SELECT 姓名,成绩,
  ROW_NUMBER()	OVER(ORDER  BY 成绩 DESC) AS [ROW_NUMBER],
  RANK()		OVER(ORDER  BY 成绩 DESC) AS [RANK],
  DENSE_RANK()	OVER(ORDER  BY 成绩 DESC) AS [DENSE_RANK],
  NTILE(3)		OVER(ORDER  BY 成绩 DESC) AS [NTILE]
FROM @table

时间: 2024-10-10 19:50:54

SQL四个排名函数的区别的相关文章

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函数的用途是非常广泛,这个函数的功能是为查询出来的每一行记录生成一个序号

四个排名函数(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函数的用途是非常广泛,这个函数的功能是为查询出来的每一行记录生成一个序号

面试问题 - SQL 中存储过程与函数的区别

SQL 中的存储过程与函数没有本质上的区别 函数 -> 只能返回一个变量. 函数可以嵌入到sql中使用, 可以在select 中调用, 而存储过程不行.  但函数也有着更多的限制,比如不能使用临时表 存储过程 -> 可以返回多个变量. 存储过程的定义如下: 存储过程可以使得对数据库的管理.以及显示关于数据库及其用户信息的工作容易得多.存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理.存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量

SQL中存储过程和函数的区别

本质上没区别.只是函数有如:只能返回一个变量的限制.而存储过程可以返回多个.而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行.执行的本质都一样.      函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少       1.    一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强.       2.    对于存储过程来说可以返回参数,而函数只能返回值或者表对象.       3.    存储过程

Sql中Rank排名函数

A.对分区中的行进行排名 以下示例按照数量对指定清单位置的清单中的产品进行了排名. 结果集按 LocationID 分区并在逻辑上按 Quantity 排序. 注意,产品 494 和 495 具有相同的数量. 因为它们是关联的,所以两者均排名第一. USE AdventureWorks2012; GO SELECT i.ProductID, p.Name, i.LocationID, i.Quantity ,RANK() OVER (PARTITION BY i.LocationID ORDER

MS SQL四种Char类型的区别

--char:char类型空间一旦分配,就不会做自动收缩,就算没有存储满也需要占据指定分配的空间,如果存储过多,就会报错 --VarChar它会根据存储的内容的长度自动收缩,如果存储的内容小于指定的空间范围,那么多余的空间会收回.所以当存储的内容的长度波动较大的时候就考虑使用VarChar --n--代表是unicode字符,任何字符都占据两个字节空间 .当以后有中文字符的时候,就使用它. --NChar:NChar类型空间一旦分配,就不会做自动收缩,而且储存的任何字符都占据两个字节空间. --

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吗?表表达式,排名函数

这次讲的有些可能是经常用但不会注意到,所以来统一总结一下用法. 我们往往需要临时存储某些结果集.除了用临时表和表变量,还可以使用公用表表达式的方法. 表表达式 期待单个值的地方可以使用标量子查询 期待多个值的地方可以使用多值子查询 在期待出现表的地方可用表值子查询或表表达式 1.派生表 是从查询表达式派生出虚拟结果表的表表达式,派生表的存在范围只是外部查询. 使用形式:from 派生表 as 派生表列名 规则: 所有列必须有名称 列名必须唯一 不允许使用order by(除非指定了top) 不同

sql rank()函数

RANK() OVER([<partiton_by_clause>]) partition_by_clause 将from子句生成的结果集划分为应用到RANK函数的分区.  Order_by_clause确定将RANK值应用到分区中的行时所使用的顺序. 以下用一个成绩表作示例 table 架构 s_score(s_class(班级),s_id(学号),s_score(分数)) SQL statement1: Select rank() over(order by s_score desc) a