我的编程空间,编程开发者的网络收藏夹
学习永远不晚

sql server中怎么使用over()函数实现分组统计

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

sql server中怎么使用over()函数实现分组统计

本篇文章为大家展示了sql server中怎么使用over()函数实现分组统计,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

需求:求出以产品类别为分组,各个分组里价格最高的产品信息。

实现过程如下:

declare @t table(ProductID int,ProductName varchar(20),ProductType varchar(20),Price int)

--测试数据

insert @tselect 1,'name1','P1',3 union allselect 2,'name2','P1',5 union allselect 3,'name3','P2',4 union allselect 4,'name4','P2',4

--做法一:找到每个组里,价格最大的值;然后再找出每个组里价格等于这个值的--缺点:要进行一次join

select t1.* from @t t1 join (select ProductType,  max(Price) Price  from @t  group by ProductType) t2 on t1.ProductType = t2.ProductType where t1.Price = t2.Price order by ProductType

--做法二:利用over(),将统计信息计算出来,然后直接筛选结果集。--over() 可以让函数(包括聚合函数)与行一起输出。

;with cte as( select *, max(Price) over(partition by (ProductType)) MaxPrice from @t)select ProductID,ProductName,ProductType,Price from cte where Price = MaxPrice order by ProductType

--over() 的语法为:over([patition by ] <order by >)。需要注意的是,over() 前面是一个函数,如果是聚合函数,那么order by 不能一起使用。--over() 的另一常用情景是与 row_number() 一起用于分页。

现在来介绍一下开窗函数。

窗口函数OVER()指定一组行,开窗函数计算从窗口函数输出的结果集中各行的值。

开窗函数不需要使用GROUP BY就可以对数据进行分组,还可以同时返回基础行的列和聚合列。

1.排名开窗函数

ROW_NUMBER、DENSE_RANK、RANK、NTILE属于排名函数。

排名开窗函数可以单独使用ORDER BY 语句,也可以和PARTITION BY同时使用。

PARTITION BY用于将结果集进行分组,开窗函数应用于每一组。

ODER BY 指定排名开窗函数的顺序。在排名开窗函数中必须使用ORDER BY语句。

例如查询每个雇员的定单,并按时间排序

WITH OrderInfo AS( SELECT ROW_NUMBER() OVER(PARTITION BY EmployeeID ORDER BY OrderDate) AS Number, OrderID,CustomerID, EmployeeID,OrderDate FROM Orders (NOLOCK)) SELECT Number,OrderID,CustomerID, EmployeeID ,OrderDateFrom OrderInfo WHERE Number BETWEEN 0 AND 10

窗口函数根据PARTITION BY语句按雇员ID对数据行分组,然后按照ORDER BY 语句排序,排名函数ROW_NUMBER()为每一组的数据分从1开始生成一个序号。

ROW_NUMBER()为每一组的行按顺序生成一个唯一的序号

RANK()也为每一组的行生成一个序号,与ROW_NUMBER()不同的是如果按照ORDER BY的排序,如果有相同的值会生成相同的序号,并且接下来的序号是不连序的。例如两个相同的行生成序号3,那么接下来会生成序号5。

DENSE_RANK()和RANK()类似,不同的是如果有相同的序号,那么接下来的序号不会间断。也就是说如果两个相同的行生成序号3,那么接下来生成的序号还是4。

NTILE (integer_expression) 按照指定的数目将数据进行分组,并为每一组生成一个序号。

2.聚合开窗函数

很多聚合函数都可以用作窗口函数的运算,如SUM,AVG,MAX,MIN。

聚合开窗函数只能使用PARTITION BY子句或都不带任何语句,ORDER BY不能与聚合开窗函数一同使用。

例如,查询雇员的定单总数及定单信息

WITH OrderInfo AS(SELECT COUNT(OrderID) OVER(PARTITION BY EmployeeID) AS TotalCount,OrderID,CustomerID, EmployeeID,OrderDate FROM Orders (NOLOCK))SELECT OrderID,CustomerID, EmployeeID ,OrderDate,TotalCountFrom OrderInfo ORDER BY EmployeeID

如果窗口函数不使用PARTITION BY 语句的话,那么就是不对数据进行分组,聚合函数计算所有的行的值。

WITH OrderInfo AS( SELECT COUNT(OrderID) OVER() AS Count,OrderID,CustomerID, EmployeeID,OrderDate FROM Orders (NOLOCK))

上述内容就是sql server中怎么使用over()函数实现分组统计,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

sql server中怎么使用over()函数实现分组统计

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

​SQL Server中quotename()函数怎么使用

在SQL Server中,QUOTENAME()函数用于将一个标识符(如表名、列名等)包围在方括号中,以防止引起语法错误或与关键字冲突。QUOTENAME()函数的语法如下所示:QUOTENAME ( 'string' [, 'quot
2023-10-23

SQL Server中DateDiff函数怎么使用

SQL Server中的DateDiff函数用于计算两个日期之间的时间差。它的语法如下:```DATEDIFF ( datepart , startdate , enddate )```其中,datepart是指定时间单位的参数,可以是以下
2023-09-07

SQL Server中row_number函数怎么使用

在SQL Server中,ROW_NUMBER()函数用于给结果集中的每一行分配一个唯一的顺序号。它的基本语法如下:```ROW_NUMBER() OVER (ORDER BY column1, column2, ...)```其中,`RO
2023-08-14

Java怎么模拟rank/over函数实现获取分组排名

这篇“Java怎么模拟rank/over函数实现获取分组排名”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java怎么模拟r
2023-07-06

SQL Server中的数学函数怎么使用

这篇“SQL Server中的数学函数怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SQL Server中的数学函数
2023-06-30

SQL Server中的JSON函数怎么使用

这篇文章主要介绍“SQL Server中的JSON函数怎么使用”,在日常操作中,相信很多人在SQL Server中的JSON函数怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SQL Server中的J
2023-06-30

SQL Server中的聚合函数怎么使用

这篇“SQL Server中的聚合函数怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SQL Server中的聚合函数
2023-06-30

SQL Server中的逻辑函数怎么使用

这篇文章主要介绍“SQL Server中的逻辑函数怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SQL Server中的逻辑函数怎么使用”文章能帮助大家解决问题。IIF: 根据布尔表达式计算
2023-06-30

sql中count统计个数怎么实现

在 SQL 中,可以使用 COUNT 函数来统计数据表中满足特定条件的记录数量。COUNT 函数的语法如下:SELECT COUNT(column_name) FROM table_name WHERE condition;其中,co
sql中count统计个数怎么实现
2024-03-11

SQL Server中的日期时间函数怎么使用

本篇内容主要讲解“SQL Server中的日期时间函数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL Server中的日期时间函数怎么使用”吧!1、getdate():获取当前日期
2023-06-30

怎么使用python中分组函数groupby和分组运算函数agg

这篇文章主要介绍“怎么使用python中分组函数groupby和分组运算函数agg”,在日常操作中,相信很多人在怎么使用python中分组函数groupby和分组运算函数agg问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希
2023-06-25

使用Pandas怎么实现一个分组计数功能

这篇文章将为大家详细讲解有关使用Pandas怎么实现一个分组计数功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在对dataframe进行分析的时候会遇到需要分组计数,计数的column中
2023-06-14

编程热搜

目录