返回顶部
首页 > 资讯 > 数据库 >SQLServer中如何使用Partition By和row_number 函数
  • 595
分享到

SQLServer中如何使用Partition By和row_number 函数

2024-04-02 19:04:59 595人浏览 八月长安
摘要

这期内容当中小编将会给大家带来有关sqlServer中如何使用Partition By和row_number 函数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。首先呢我把

这期内容当中小编将会给大家带来有关sqlServer中如何使用Partition By和row_number 函数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

首先呢我把表中的数据按照提交时间倒序出来:

“corp_name”就是分类的GUID(请原谅我命名的随意性)。 OK, 这里按照最开始的想法加上Group By来看一下显示效果:

呃,嗯。这尼玛和想象中的结果不一样啊,看来写代码还是要理性分析问题,意念是无法控制结果滴!

既然要求是不同分类的数据,除了使用Group By之外,还有别的函数能用吗?度娘了一下结果还真有,over(partition by )函数,那么它和平时用的Group By有什么区别呢? Group By除了对结果进行单纯的分组之外呢,一般都和聚合函数一起使用,Partition By也具有分组功能,属于oracle的分析函数,在这里就不详细的不啦不啦不啦了。

看代码:

over(partition by corp_name order by submit_time desc ) as t 。就是按照corp_name分类并按时间倒序出来,"t" 这里一列呢就是不同corp_name类出现的次数,需求是只查询出不同分类的最新提交数据,那么我们只需要针对"t"再进行一次筛选即可:

好啦,结果已经出来,不求各位看官喜欢,但求看在我头像中的胸器望点个赞, 好人一生平安哦!!!

ps:SQL Server数据库partition by 与ROW_NUMBER()函数使用详解

关于SQL的partition by 字段的一些用法心得

先看例子:

if object_id('TESTDB') is not null drop table TESTDBcreate table TESTDB(A varchar(8), B varchar(8))insert into TESTDBselect 'A1', 'B1' uNIOn allselect 'A1', 'B2' union allselect 'A1', 'B3' union allselect 'A2', 'B4' union allselect 'A2', 'B5' union allselect 'A2', 'B6' union allselect 'A3', 'B7' union allselect 'A3', 'B3' union allselect 'A3', 'B4'

-- 所有的信息

SELECT * FROM TESTDBA  B-------A1 B1A1 B2A1 B3A2 B4A2 B5A2 B6A3 B7A3 B3A3 B4

-- 使用PARTITION BY 函数后

SELECT *,ROW_NUMBER() OVER(PARTITION BY A ORDER BY A DESC) NUM FROM TESTDBA  B  NUM-------------A1 B1 1A1 B2 2A1 B3 3A2 B4 1A2 B5 2A2 B6 3A3 B7 1A3 B3 2A3 B4 3

可以看到结果中多出一列NUM 这个NUM就是说明了相同行的个数,比如A1有3个,他就给每个A1标上是第几个。

-- 仅仅使用ROW_NUMBER() OVER的结果

SELECT *,ROW_NUMBER() OVER(ORDER BY A DESC)NUM FROM TESTDB A  B   NUM------------------------A3 B7  1A3 B3  2A3 B4  3A2 B4  4A2 B5  5A2 B6  6A1 B1  7A1 B2  8A1 B3  9

可以看到它只是单纯标出了行号。

-- 深入一点应用

SELECT A = CASE WHEN NUM = 1 THEN A ELSE '' END,BFROM (SELECT A,NUM = ROW_NUMBER() OVER(PARTITION BY A ORDER BY A DESC) FROM TESTDB) TA  B---------A1 B1  B2  B3A2 B4  B5  B6A3 B7  B3  B4

接下来我们就通过几个实例来一一介绍ROW_NUMBER()函数的使用。

实例如下:

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.筛选出客户第一次下的订单。

思路。利用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'

上述就是小编为大家分享的SQLServer中如何使用Partition By和row_number 函数了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: SQLServer中如何使用Partition By和row_number 函数

本文链接: https://lsjlt.com/news/57190.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SQLServer中如何使用Partition By和row_number 函数
    这期内容当中小编将会给大家带来有关SQLServer中如何使用Partition By和row_number 函数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。首先呢我把...
    99+
    2024-04-02
  • SQLServer中Partition By及row_number函数的使用
    这篇文章运用简单易懂的例子给大家介绍SQLServer中Partition By及row_number函数的使用,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。partition &nb...
    99+
    2024-04-02
  • SQLServer中的row_number函数怎么使用
    本文小编为大家详细介绍“SQLServer中的row_number函数怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“SQLServer中的row_number函数怎么使用”文章能帮助大家解决疑惑,...
    99+
    2023-03-07
    sqlserver row_number
  • Sqlserver使用ROW_NUMBER()函数进行数据分页
    在Sqlserver数据库中,如果查询表中含有自增长Id列,一般会采用select Top的方式来数据的分页操作。而实际上很多数据表设计的时候,不一定含有自增长Id列,那么数据库没有Id自增列的时...
    99+
    2024-04-02
  • MySQL5.7 实现类似 MySQL8.0 中 row_number() over(partition by ... order by ...) 函数的分组排序编号效果
    示例 现在这里有一张用户表 user,里面包含以下字段:ID 主键、USERNAME 用户名、PASSWORD 密码、COMPANY 公司、DEPT 部门、CREATE_TIME 创建时间。 IDUS...
    99+
    2023-09-24
    数据库 sql mysql
  • sqlServer中使用ROW_NUMBER时不排序如何解决
    sqlServer中使用ROW_NUMBER时不排序如何解决,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。设置sqlServer使用ROW_N...
    99+
    2024-04-02
  • SQLServer中merge函数如何使用
    本篇文章给大家分享的是有关SQLServer中merge函数如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Merge关键字是一个神奇的...
    99+
    2024-04-02
  • SQLServer中CONVERT 函数如何使用
    SQLServer中CONVERT 函数如何使用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。代码如下: SELECT CONV...
    99+
    2024-04-02
  • SQLServer中SplitString函数如何使用
    今天就跟大家聊聊有关SQLServer中SplitString函数如何使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。代码如下: SET ANS...
    99+
    2024-04-02
  • Mysql中Row_number()函数怎么使用
    在MySQL中,没有内置的ROW_NUMBER()函数,但是你可以使用用户自定义变量来模拟它。以下是一个示例: SELECT...
    99+
    2024-04-09
    Mysql
  • SQL Server中row_number函数怎么使用
    在SQL Server中,ROW_NUMBER()函数用于给结果集中的每一行分配一个唯一的顺序号。它的基本语法如下:```ROW_N...
    99+
    2023-08-14
    SQL Server row_number
  • SQLServer数据库中如何使用ISNULL函数
    SQLServer数据库中如何使用ISNULL函数,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  SQLServer数据库I...
    99+
    2024-04-02
  • SQL如何使用ROW_NUMBER() OVER函数生成序列号
    这篇文章给大家介绍SQL如何使用ROW_NUMBER() OVER函数生成序列号,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ...
    99+
    2023-06-22
  • 窗口函数OVER(PARTITION BY)详细用法——语法+函数+开窗范围ROWS和RANGE
    目录 一、函数写法 二、开窗的窗口范围ROWS与RANGE 1.范围限定用法 2.ROWS和RANGE的区别 (1) ROWS按行数限定 (2) RANGE按数据范围限定         order by 数字               ...
    99+
    2023-09-02
    数据库 mysql sql
  • 如何解决sqlServer使用ROW_NUMBER时不排序的方法
    本篇文章给大家分享的是有关如何解决sqlServer使用ROW_NUMBER时不排序的方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。设置s...
    99+
    2024-04-02
  • SQLServer RANK()排名函数如何使用
    今天小编给大家分享一下SQLServer RANK()排名函数如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧...
    99+
    2023-06-29
  • SQLServer中如何处理数学运算和函数
    在 SQL Server 中,你可以使用内置的数学函数和操作符来处理数学运算。以下是一些常用的数学函数和操作符: 加法:使用加号...
    99+
    2024-04-09
    SQLServer
  • sqlserver中delete和update如何使用
    sqlserver中delete和update如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。结论:(ORAC...
    99+
    2024-04-02
  • MySQL group by和order by如何一起使用
    假设有一个表:reward(奖励表),表结构如下: CREATE TABLE test.reward ( id int(11) NOT NULL AUTO_INCREMENT, uid int(11) NOT...
    99+
    2022-05-27
    MySQL group by order by
  • SQLserver中如何使用convert函数转换日期格式
    这篇文章给大家介绍SQLserver中如何使用convert函数转换日期格式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。SQL Server中文版的默认的日期字段datetime格式...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作