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()的更多相关文章

  1. SQL Server中排名函数row_number,rank,dense_rank,ntile详解

    SQL Server中排名函数row_number,rank,dense_rank,ntile详解 从SQL SERVER2005开始,SQL SERVER新增了四个排名函数,分别如下:1.row_n ...

  2. SQL Server:排名函数row_number,rank,dense_rank,ntile详解

    1.Row_Number函数 row_number函数大家比较熟悉一些,因为它的用途非常的广泛,我们经常在分页与排序中用到它,它的功能就是在每一行中生成一个连续的不重复的序号 例如: select S ...

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

    首先,我们创建一些测试数据. if OBJECT_ID('Tempdb.dbo.#Tmp') is not null drop table #Tmp create table #Tmp ( name ...

  4. 好用的排名函数~ROW_NUMBER(),RANK(),DENSE_RANK() 三兄弟

    排名函数三兄弟,一看名字就知道,都是为了排名而生!但是各自有各自的特色!以下一个例子说明问题!(以下栗子没有使用Partition By 的关键字,整个结果集进行排序) RANK 每个值一个排名,同样 ...

  5. Spark2 Dataset分析函数--排名函数row_number,rank,dense_rank,percent_rank

    select gender,       age,       row_number() over(partition by gender order by age) as rowNumber,    ...

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

    ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()   今天女票问我SqlServer的四种排序,当场写了几句Sql让她了解,现把相关Sql放上来. 首先, ...

  7. SQL Server - 四种排序, ROW_NUMBER() /RANK() /DENSE_RANK() /ntile() over()

    >>>>英文版 (更简洁易懂)<<<< 转载自:https://dzone.com/articles/difference-between-rownum ...

  8. sql 的是四个排名函数

    四个排名函数的用法: http://www.cnblogs.com/xhyang110/archive/2009/10/27/1590448.html 字符串分割:http://www.cnblogs ...

  9. 知方可补不足~row_number,rank,dense_rank,ntile排名函数的用法

    回到目录 这篇文章介绍SQL中4个很有意思的函数,我称它的行标函数,它们是row_number,rank,dense_rank和ntile,下面分别进行介绍. 一 row_number:它为数据表加一 ...

随机推荐

  1. 必须声明表变量 "@P0"

    mybatis提示错误 ### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 必须声明表变量 "@P0". ; u ...

  2. 遇见Navicat 2003-can't connect to MYSQL server on 'localhost'(10061)

    学习过程中难免遇到问题,今天就遇到了Navicat 2003-can't connect to MYSQL server on 'localhost'(10061),navicat报错,我就纳闷以前都 ...

  3. 1.CentOS6.5下的基础DNS配置

    常规DNS的安全和配置1.安装DNSyum -y install bind bind-utils安装后生成的文件,我们主要配置下面几个/etc/named.conf/var/named/xx这个xx是 ...

  4. webService基本概念、元素及简单编码实现

    webService "网络服务"(Web Service)的本质,就是通过网络调用其他网站的资源. 网络服务是相对于本地服务来说的,本机完成本机需要完成的任务,叫"本地 ...

  5. How to deal with the problem '<' in OpenERP's view file

    In this case,if you write some stirng in your fields which contains '<' , OpenERP will give a err ...

  6. kafka多线程消费topic的问题

    案例: topic:my-topic,分区:6 消费者:部署三台机器,每台机器上面开启6个线程消费. 消费结果:只有一台机器可以正常消费,另外两台机器直接输出六条告警日志: No broker par ...

  7. Map集合的四种遍历方式(转载)

    import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class TestMap { pu ...

  8. 【Ubuntu】安装配置apahce

    安装apachesudo apt-get install apache2 安装目录 /etc/apache2配置文件 /etc/apache2/apache2.conf默认网站根目录 /var/www ...

  9. css中奇怪的地方

    1.border-color      继承内部元素前景色(color:black.可能对元素本身没有效果) 2.border-style:none;//不仅样式没了,border-width也变为0 ...

  10. Linux下mysql基础命令(一)

    1, 创建mysqld数据库的管理用户:             要把root用户设置为管理员,我们应该运行下面的命令:    # mysqladmin -u root password 密码 一般情 ...