SQL-OVER与四种排名函数:ROW_NUMBER(),RANK(),DENSE_RANK(),NTILE()
1 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 Sales.OrderValues
ORDER BY val;

ROW_NUMBER() 函数用于为查询的结果集中的各行分配递增的序列号,其逻辑顺序通过 OVER 子句中的 ORDER BY 语句进行指定。在查询例子中,逻辑顺序基于的是val列;因此,从输出中可以看到:随着订单价格的增加,行号也随之增加。不过,即使订单价格没有增加,行号还是会随之增加。所以如果 ROW_NUMBER() 函数的ORDER BY 不能唯一确定行的顺序,查询结果就是不确定的,可能查询出多个正确结果。例如,价格为 36.00 的两行,它们的行号分别为 7 和 8。如果这些行的顺序发生了变化,结果都可以认为是正确的,但不一定是你想要的。想让行号计算值是确定的,则必须在 ORDER BY 列表中添加元素,让它具有唯一性;也就是说,要让 ORDER BY 子句中列出的元素能够唯一地确定各个行。例如,可以在 ORDER BY 列表中增加 orderid 作为附加属性,这样,行号计算结果就是确定的。
RANK() 函数在相同排序值生成的行号是同样的,并且之后的行号会跳过之前的行数
DENSE_RANK() 函数在相同排序值生成的行号也是同样的,但之后的行号不会跳过缺省值,而是连续的
NTILE(INT) 函数把结果中的行关联到组(title,相当于由行组成的指定数目的组),并为每一行分配一个所属组的编号
PARTITION BY 子句-在 OVER 中使用分组,例:
SELECT orderid,custid,val,
ROW_NUMBER() OVER(PARTITION BY custid ORDER BY val) AS rownum
FROM Sales.OrderValues
ORDER BY custid,val

SQL-OVER与四种排名函数:ROW_NUMBER(),RANK(),DENSE_RANK(),NTILE()的更多相关文章
- SQL Server中排名函数row_number,rank,dense_rank,ntile详解
SQL Server中排名函数row_number,rank,dense_rank,ntile详解 从SQL SERVER2005开始,SQL SERVER新增了四个排名函数,分别如下:1.row_n ...
- SQL Server:排名函数row_number,rank,dense_rank,ntile详解
1.Row_Number函数 row_number函数大家比较熟悉一些,因为它的用途非常的广泛,我们经常在分页与排序中用到它,它的功能就是在每一行中生成一个连续的不重复的序号 例如: select S ...
- SqlServer四种排序:ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()
首先,我们创建一些测试数据. if OBJECT_ID('Tempdb.dbo.#Tmp') is not null drop table #Tmp create table #Tmp ( name ...
- 好用的排名函数~ROW_NUMBER(),RANK(),DENSE_RANK() 三兄弟
排名函数三兄弟,一看名字就知道,都是为了排名而生!但是各自有各自的特色!以下一个例子说明问题!(以下栗子没有使用Partition By 的关键字,整个结果集进行排序) RANK 每个值一个排名,同样 ...
- Spark2 Dataset分析函数--排名函数row_number,rank,dense_rank,percent_rank
select gender, age, row_number() over(partition by gender order by age) as rowNumber, ...
- ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()
ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over() 今天女票问我SqlServer的四种排序,当场写了几句Sql让她了解,现把相关Sql放上来. 首先, ...
- SQL Server - 四种排序, ROW_NUMBER() /RANK() /DENSE_RANK() /ntile() over()
>>>>英文版 (更简洁易懂)<<<< 转载自:https://dzone.com/articles/difference-between-rownum ...
- sql 的是四个排名函数
四个排名函数的用法: http://www.cnblogs.com/xhyang110/archive/2009/10/27/1590448.html 字符串分割:http://www.cnblogs ...
- 知方可补不足~row_number,rank,dense_rank,ntile排名函数的用法
回到目录 这篇文章介绍SQL中4个很有意思的函数,我称它的行标函数,它们是row_number,rank,dense_rank和ntile,下面分别进行介绍. 一 row_number:它为数据表加一 ...
随机推荐
- [原创] Trie树 php 实现敏感词过滤
目录 背景 简介 存储结构 PHP 其他语言 字符串分割 示例代码 php 优化 缓存字典树 常驻服务 参考文章 背景 项目中需要过滤用户发送的聊天文本, 由于敏感词有将近2W条, 如果用 str_r ...
- GeneXus学习笔记——创建一个知识库 哈哈哈哈!
终于想到写什么东西了(绝对不是因为懒 好吧 信我) 那么进入正题 我们写项目的时候 遇到一些问题啥的 总会听到大佬说:“这有什么难的 说到底不就是简单的增删改查么" 然后我们就会露出 Σ ...
- dubbo SPI设计
SPI 全称为 Service Provider Interface,是一种服务发现机制.SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类.这样可以在运行时, ...
- Selenium+Chrome+PhantomJS爬取淘宝美食
搜索关键字 利用selenium驱动浏览器搜索有关键字,得到查询后的商品列表 分析页码并翻页 得到商品码数,模拟翻页,得到后续页面的商品列表 分析提取商品内容 利用PyQuery分析源码,解析得到商品 ...
- macOS High Sierra 10.13正式版USB安装盘制作
1.首先,准备一个 8GB 或更大容量的 U盘,并备份好里面的所有资料. 2.下载好 macOS High Sierra 正式版的安装程序:https://support.apple.com/zh-c ...
- Linus' Law
Given enough eyeballs, all bugs are shallow. ------埃里克 ...
- 第2章—装配Bean—自动化装配Bean
自动化装配Bean 2.1.Spring配置可选方案 装配是依赖注入DI的本质,Spring提供了以下三种注入的装配机制: 在XMl中进行显式配置 在java中进行显式配置 隐式的Bean发现机制 ...
- HTTP协议浅谈
一.介绍: http 即 超文本传送协议 (Hypertext transfer protocol) 是通过因特网传送万维网文档的数据传送协议.今天普遍使用的一个版本——HTTP 1.1. HTTP ...
- ../../build/debug/codegen/libCodeGen.a(llvm-codegen.cc.o ):( data.rel.ro_ZTIN4llvm18ValueMapCallbackVHIPKNS_5ValueENS_6WeakVHENS_14ValueMapConfigIS3_EEEE[_ZTIN4llvm18ValueMapCallbackVHIPKNS_5ValueENS_
解决方式如下: wget http://llvm.org/releases/3.3/llvm-3.3.src.tar.gz tar xvzf llvm-3.2.src.tar.gz cd ...
- java值传递与引用传递
看代码: import java.lang.reflect.Field; public class Test { public static void main(String[] args) { In ...