ROW_NUMBERSQLServer2005的LIMIT功能实现(ROW_NUMBER()排序函数)
排序 实现 函数 number 功能 limit row
2023-06-13 09:14:34 时间
语法:
ROW_NUMBER()OVER([<partition_by_clause>]<order_by_clause>)
备注:
ORDERBY子句可确定在特定分区中为行分配唯一ROW_NUMBER的顺序。
参数:
<partition_by_clause>将FROM子句生成的结果集划入应用了ROW_NUMBER函数的分区。
<order_by_clause>确定将ROW_NUMBER值分配给分区中的行的顺序。有关详细信息,请参阅ORDERBY子句(Transact-SQL)。
返回类型:
bigint
类似于MySQL的LIMIT功能语法实例:
复制代码代码如下:
ROW_NUMBER()OVER([<partition_by_clause>]<order_by_clause>)
备注:
ORDERBY子句可确定在特定分区中为行分配唯一ROW_NUMBER的顺序。
参数:
<partition_by_clause>将FROM子句生成的结果集划入应用了ROW_NUMBER函数的分区。
<order_by_clause>确定将ROW_NUMBER值分配给分区中的行的顺序。有关详细信息,请参阅ORDERBY子句(Transact-SQL)。
返回类型:
bigint
类似于MySQL的LIMIT功能语法实例:
SELECT*FROM(SELECTROW_NUMBER()OVER(ORDERBYidASC)ASrownum,*FROMMyTable)ASitemsWHEREitems.rownumBETWEEN20AND30;
sqlROW_NUMBER()排序函数
1使用row_number()函数进行编号:如
selectemail,customerID,ROW_NUMBER()over(orderbypsd)asrowsfromQT_Customer
原理:先按psd进行排序,排序完后,给每条数据进行编号。
2.在订单中按价格的升序进行排序,并给每条记录进行排序
代码如下:
selectDID,customerID,totalPrice,ROW_NUMBER()over(orderbytotalPrice)asrowsfromOP_Order
3.统计出每一个各户的所有订单并按每一个客户下的订单的金额升序排序,同时给每一个客户的订单进行编号。这样就知道每个客户下几单了。
代码如下:
4.统计每一个客户最近下的订单是第几次下的订单。
代码如下:
withtabsas
(
selectROW_NUMBER()over(partitionbycustomerIDorderbytotalPrice)asrows,customerID,totalPrice,DIDfromOP_Order
)
selectMAX(rows)as"下单次数",customerIDfromtabsgroupbycustomerID
5.统计每一个客户所有的订单中购买的金额最小,而且并统计改订单中,客户是第几次购买的。
如图:
上图:rows表示客户是第几次购买。
思路:利用临时表来执行这一操作
1.先按客户进行分组,然后按客户的下单的时间进行排序,并进行编号。
2.然后利用子查询查找出每一个客户购买时的最小价格。
3.根据查找出每一个客户的最小价格来查找相应的记录。
代码如下:
withtabsas
(
selectROW_NUMBER()over(partitionbycustomerIDorderbyinsDT)asrows,customerID,totalPrice,DIDfromOP_Order
)
select*fromtabs
wheretotalPricein
(
selectMIN(totalPrice)fromtabsgroupbycustomerID
)
5.筛选出客户第一次下的订单。
思路。利用rows=1来查询客户第一次下的订单记录。
代码如下:
withtabsas
(
selectROW_NUMBER()over(partitionbycustomerIDorderbyinsDT)asrows,*fromOP_Order
)
select*fromtabswhererows=1
select*fromOP_Order
6.rows_number()可用于分页
思路:先把所有的产品筛选出来,然后对这些产品进行编号。然后在where子句中进行过滤。
7.注意:在使用over等开窗函数时,over里头的分组及排序的执行晚于“where,groupby,orderby”的执行。
如下代码:
select
ROW_NUMBER()over(partitionbycustomerIDorderbyinsDT)asrows,
customerID,totalPrice,DID
fromOP_OrderwhereinsDT>"2011-07-22"
以上代码是先执行where子句,执行完后,再给每一条记录进行编号。
相关文章
- go实现常见排序算法
- 选择排序(C语言实现)
- 在iview中实现列表远程排序
- 利用Linux Top命令实现多级排序(linuxtop排序)
- Oracle 中实现数据分组与排序的技巧(分组排序oracle)
- MongoDB查询排序:获得最佳结果(mongodb查询排序)
- Linux 中按日期排序文件的方法(linux文件日期排序)
- MySQL实现数据随机获取,让数据随机排序成为可能。(mysql随机获取数据)
- MySQL 实现汉字拼音排序的方法(mysql汉字拼音排序)
- Oracle自动排序:轻松实现高效排序(oracle自动排序)
- MSSQL中实现置顶排序的方法(mssql置顶排序)
- Oracle数据库更新之前先排序优化(oracle先排序再更新)
- 高效实现数据分组和排序MySQL无需使用开窗函数(mysql不用开窗函数)
- 借助Redis实现高效的键排序(redis 键排序)
- 使用Oracle实现不规则排序(oracle 不规则排序)
- Redis中实现数据排序的最佳实践(redis 获取数据排序)
- javascript节点排序实现代码
- c语言实现冒泡排序、希尔排序等多种算法示例
- JS排序输出实现table行号自增前端动态生成的tr
- PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析