SQL中ROW_NUMBER() 排序函数使用详解

以前写过一篇文章排序提到过ROW_NUMBER()函数,但是很多同学是第一次见到,根本不知道这个函数的详细用法。

MK在这里贴出来详细说明供大家参考:

Mssql取得第10到第20条的不连续记录的三种方法

1、使用row_number()函数进行编号:如

SELECT email,customerID, ROW_NUMBER() OVER(ORDER BY psd) AS ROWS FROM QT_Customer
原理:先按psd进行排序,排序完后,给每条数据进行编号。

2、在订单中按价格的升序进行排序,并给每条记录进行排序

代码如下:

SELECT DID,customerID,totalPrice,ROW_NUMBER() OVER(ORDER BY totalPrice) AS ROWS FROM OP_Order
3、统计出每一个各户的所有订单并按每一个客户下的订单的金额 升序排序,同时给每一个客户的订单进行编号。
这样就知道每个客户下几单了。

如图:

代码如下:

 代码如下 复制代码
SELECT ROW_NUMBER() OVER(partition BY customerID  ORDER BY totalPrice) AS ROWS,customerID,totalPrice, DID FROM OP_Order

4、统计每一个客户最近下的订单是第几次下的订单。

代码如下:

 代码如下 复制代码
WITH tabs AS
(
SELECT ROW_NUMBER() OVER(partition BY customerID  ORDER BY totalPrice) AS ROWS,customerID,totalPrice, DID FROM OP_Order
)
 
SELECT MAX(ROWS) AS '下单次数',customerID FROM tabs GROUP BY customerID

5、统计每一个客户所有的订单中购买的金额最小,而且并统计改订单中,客户是第几次购买的。

上图:rows表示客户是第几次购买。

思路:利用临时表来执行这一操作

1.先按客户进行分组,然后按客户的下单的时间进行排序,并进行编号。

2.然后利用子查询查找出每一个客户购买时的最小价格。

3.根据查找出每一个客户的最小价格来查找相应的记录。

代码如下:

 代码如下 复制代码
WITH tabs AS
(
SELECT ROW_NUMBER() OVER(partition BY customerID  ORDER BY insDT) AS ROWS,customerID,totalPrice, DID FROM OP_Order
)
SELECT * FROM tabs
WHERE totalPrice IN
(
SELECT MIN(totalPrice)FROM tabs GROUP BY customerID
)

6、筛选出客户第一次下的订单。

row4
思路。利用rows=1来查询客户第一次下的订单记录。

代码如下:

 代码如下 复制代码
WITH tabs AS
(
SELECT ROW_NUMBER() OVER(partition BY customerID  ORDER BY insDT) AS ROWS,* FROM OP_Order
)
SELECT * FROM tabs WHERE ROWS = 1
 
SELECT * FROM OP_Order

7、rows_number()可用于分页

思路:先把所有的产品筛选出来,然后对这些产品进行编号。然后在where子句中进行过滤。

8.注意:在使用over等开窗函数时,over里头的分组及排序的执行晚于“where,group by,order by”的执行。

如下代码:

 代码如下 复制代码
SELECT
ROW_NUMBER() OVER(partition BY customerID  ORDER BY insDT) AS ROWS,
customerID,totalPrice, DID
FROM OP_Order WHERE insDT>'2011-07-22'

以上代码是先执行where子句,执行完后,再给每一条记录进行编号。

除了上面还可以利用它来分页

例子,sql语句分页多种方式ROW_NUMBER

方式一

 代码如下 复制代码
select top @pageSize * from company where id not in
(select top @pageSize*(@pageIndex-1) id from company)

 
方式二ROW_NUMBER()OVER
 

 代码如下 复制代码
--ROW_NUMBER() 就是生成一个有顺序的行号,而他生成顺序的标准,就是后面紧跟的OVER(ORDER BY ID)
--还必须添加OVER语句以便告诉SQL Server你希望怎样添加行序号。
select getdate()
select * from company where id in (
--搜索出settable表中所有的编号,也就是company表中的id,这里只不过要得到num(即有顺序的编号)
select id from
--搜索出出表中的所有的id,并且新建一列num用来存取排序的编号,并且把这张表赋值给settable
(select id,row_number() over (order by id) as
num from company)
as settable
--添加搜索条件页索引和页大小
where num between (@pageIndex-1)*@pageSize+1 and @pageIndex*@pageSize)
select getdate()
时间: 2024-09-20 01:07:00

SQL中ROW_NUMBER() 排序函数使用详解的相关文章

MySQL中的RAND()函数使用详解

  这篇文章主要介绍了MySQL中的RAND()函数使用详解,是MySQL入门学习中的基础知识,需要的朋友可以参考下 MySQL RAND()函数调用可以在0和1之间产生一个随机数: ? 1 2 3 4 5 6 7 mysql> SELECT RAND( ), RAND( ), RAND( ); +------------------+-----------------+------------------+ | RAND( ) | RAND( ) | RAND( ) | +----------

JavaScript中push(),join() 函数 实例详解_javascript技巧

定义和用法 push方法 可向数组的末尾添加一个或多个元素,并返回一个新的长度. join方法 用于把数组中所有元素添加到一个指定的字符串,元素是通过指定的分隔符进行分割的. 语法 arrayObject.push(newelement1,newelement2,....,newelementX) arrayObject.join(separator). 参数描述newelement1必需.要添加到数组的第一个元素.newelement2可选.要添加到数组的第二个元素.newelementX可选

SQL中case when的用法详解

Case具有两种格式.简单Case函数和Case搜索函数. 简单Case函数 1.语法 CASE input_expression_r WHEN when_expression_r THEN result_expression_r [ ...n ] [ ELSE else_result_expression_r ] END 2.实例   CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END Case搜索函数 1.语法 CASE WH

java中Collections.sort排序函数用法详解_java

Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f,g这样,当然数字也是这样的. compare(a,b)方法:根据第一个参数小于.等于或大于第二个参数分别返回负整数.零或正整数. equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true. Collections.

SQL Server正则表达式 替换函数应用详解_MsSql

--SQL正则替换函数 复制代码 代码如下: CREATE function dbo.regexReplace ( @source ntext, --原字符串 @regexp varchar(1000), --正则表达式 @replace varchar(1000), --替换值 @globalReplace bit = 1, --是否是全局替换 @ignoreCase bit = 0 --是否忽略大小写 ) returnS varchar(1000) AS begin declare @hr

php中Array数组函数用法详解(1/2)

简介:本次介绍的是PHP手册中用来对数组进行各种操作的系统函数,可以说数组在PHP中有重要的作用,因此函数也是灰常多,下面天涯把最常用的进行详细说明. array_change_key_case - 返回字符串键名全为小写或大写的数组     array array_change_key_case ( array $input [, int $case ] ) $case 可为 CASE_UPPER 或 CASE_LOWER(默认)      代码如下 复制代码 <?php     $phpha

MySQL中的RAND()函数使用详解_Mysql

MySQL RAND()函数调用可以在0和1之间产生一个随机数: mysql> SELECT RAND( ), RAND( ), RAND( ); +------------------+-----------------+------------------+ | RAND( ) | RAND( ) | RAND( ) | +------------------+-----------------+------------------+ | 0.45464584925645 | 0.18244

Mysql中LAST_INSERT_ID()的函数使用详解_Mysql

最近和Sobin在做一个精品课程的项目,因为用到一个固定的id作为表间关联,所以在前一个表插入数据后要把插入数据生成的自增id传递给下一个表.研究了一番决定使用Mysql提供了一个LAST_INSERT_ID()的函数. 复制代码 代码如下: LAST_INSERT_ID() (with no argument) returns the first automatically generated value that was set for an AUTO_INCREMENT column by

SQL中xp_cmdshell开启和关闭详解

xp_cmdshell --SQL Server 2005 中引入的 xp_cmdshell 选项是服务器配置选项,使系统管理员能够控制是否可以在系统上执行 xp_cmdshell 扩展存储过程.默认情况下,xp_cmdshell 选项在新安装的软件上处于禁用状态,但是可以通过使用外围应用配置器工具或运行 sp_configure 系统存储过程来启用它,如下面的代码示例所示:  代码如下 复制代码  -- To allow advanced options to be changed. --允许